In a large bowl, combine the ground beef, milk, seasoned bread crumbs, egg, chopped parsley, minced garlic (3 cloves), finely chopped onion (1/4 cup), grated Parmesan, and salt and pepper to taste; mix until evenly combined.
Scoop the mixture with a 3-tablespoon cookie scoop or spoon and roll into evenly sized meatballs; place them on a plate.
Heat 2 tablespoons of the olive oil in a heavy-bottomed pot or Dutch oven over medium heat and brown about half the meatballs on all sides; transfer to a plate (they will finish cooking in the sauce).
Add the remaining 2 tablespoons olive oil to the pot and brown the rest of the meatballs; remove them to the plate as well.
To make the sauce, add the diced onion (1 cup) to the pot with the meat drippings and any remaining olive oil; cook until nearly tender, about 4 minutes.
Stir in the 2 cloves minced garlic and cook about 30 seconds until fragrant.
Pour in the tomato sauce (2 cans) and beef broth (1 cup), then add dried basil, Italian seasoning, sugar, and salt and pepper to taste; stir to combine.
Gently return the browned meatballs to the pot, spooning sauce over them to coat, then reduce heat to low or medium-low and simmer, covered or partially covered, for 30–45 minutes until meatballs are cooked through and tender.
While the sauce simmers, cook the spaghetti according to package directions until al dente, then drain.
Serve the meatballs and sauce over the cooked spaghetti and garnish with chopped fresh basil and extra Parmesan if desired.