To make the sauce, heat olive oil in a large pot or Dutch oven over medium heat. Add the onion to the pot and saute until tender, 5-8 minutes. Add the garlic and saute until fragrant, stirring, about 1 minute. Add the tomato puree, tomato sauce, parsley, basil, oregano, salt and sugar. Add water to thin the sauce out to your desired consistency. Bring to a boil, then lower the heat to a simmer. Let simmer for at least 2 hours.
To make the meatballs, in a medium mixing bowl combine all ingredients and mix thoroughly with your hands. Form the mixture into equal-sized meatballs and place onto a baking sheet lined with aluminum foil. Bake for 20 minutes, or until cooked through.
Transfer spaghetti to serving dishes. Top each serving with sauce and meatballs. Garnish with shredded Parmesan and fresh basil, if desired.