In a large pot or dutch oven, heat olive oil over medium-low heat. Once hot, add the onion and garlic, sauté until onions are translucent, about 3 minutes.
Stir in the tomato paste and cook for 1 minute. Stir in the crushed tomatoes, salt, and pepper. Simmer covered, with lid slightly ajar to prevent splattering for 30 minutes, stirring occasionally. Season with salt and pepper to taste.
Set the oven rack to the lower-middle position and set it to broil. Line a large baking sheet with foil and lightly grease it with olive oil. Set aside.In a large bowl, add the ground beef, eggs, breadcrumbs, parmesan cheese, minced onion, salt, black pepper, Italian seasoning, and minced garlic. Use hands to mix thoroughly until combined.
Measure and roll the ground beef mixture into ⅓ cup (3 ounces) rounds, about the size of an egg. Evenly space the pieces on the baking sheet, there should be about 14 to 15 meatballs.
Broil the meatballs until the surface is browned, about 10 to 12 minutes. Turn over and cook for an additional 2 to 3 minutes to lightly brown the other side.
Transfer the meatballs to the tomato sauce. Cover the pot with the lid slightly ajar, simmer on low heat for at least 1 ½ hours, checking and stirring every 20 minutes, or as needed. The meatballs should be fork tender when sliced.
At the end of cooking, adjust the consistency of the sauce with water if needed, about 1 tablespoon at a time. Season to taste with salt and pepper.
Serve meatballs with spaghetti topped with sauce, sliced basil, and Parmesan cheese.
Storing: Cool completely and store in an airtight container for up to 5 days.
Freezing: Uncooked meatballs can be stored in a large freezer bag for up to 1 month in the freezer. Defrost before broiling. Cooked meatballs and sauce can be frozen for up to 1 month, then defrosting and reheated on the stovetop until hot.
Make it gluten-free: Use gluten-free breadcrumbs or almond flour.
Make it in the slow cooker: Use a 6-quart slow cooker. Add the sauce ingredients to the slow cooker and broiled meatballs. Cook on high setting for 3 hours, or 6 hours on the low setting.