In a large bowl, combine ground beef, breadcrumbs, egg, dry mustard, garlic powder, salt, and black pepper. Mix gently until just combined; do not overwork the meat.
Roll the mixture into 1 ½-inch meatballs. (I made 16 meatballs.)
To a large skillet over medium heat, add butter and olive oil. Once the butter is melted and the oil is hot, add the meatballs in a single layer. (Depending on the size of your skillet, you may have to cook the meatballs in batches.) Sear for about 3-4 minutes per side, turning to brown evenly. Once browned, transfer the meatballs to a plate. (The meatballs may not be fully cooked at this point; they will continue to cook in the gravy.)
To the same skillet, add the sliced onion. Reduce heat and cook over medium-low heat for 12-15 minutes, stirring occasionally, until deeply caramelized and golden brown.
Increase heat to medium. Pour in the beef broth and Worcestershire sauce, stirring to loosen any browned bits from the bottom of the skillet.
In a small bowl, whisk together cornstarch and water until smooth. Slowly pour the cornstarch mixture into the skillet, stirring constantly to avoid clumps. Let the gravy simmer for 8-10 minutes to thicken.
Season with salt and pepper to taste.
Return the meatballs to the skillet, spooning gravy over them. Cover and let simmer on low heat for 5 minutes to ensure the meatballs are cooked through to an internal temperature of 165°F.
Garnish with parsley. Serve hot over mashed potatoes.