Stir the panko breadcrumbs and whole milk together in a large bowl. Let stand for 2 minutes to allow the panko to absorb the milk.
Add the egg, Parmesan, grated onion, garlic, Worcestershire sauce, Dijon mustard, kosher salt, black pepper, thyme, and parsley. Stir until evenly mixed. Add the ground beef and mix gently until the seasonings are evenly distributed, taking care not to overmix.
Shape the mixture into 28 to 30 meatballs, using about a heaping tablespoon of mixture for each. Lightly wet your hands as needed to prevent sticking.
Heat the olive oil in a large oven-safe skillet over medium heat. Working in batches as needed to avoid crowding the skillet, brown the meatballs for 5 to 6 minutes, turning every 1 to 2 minutes so they brown on most sides. The meatballs should remain undercooked in the center since they will finish cooking in the sauce. Transfer to a plate.
Reduce the heat to medium-low and add the butter to the same skillet, leaving the browned bits from the meatballs in the pan. Once the butter has melted, add the sliced onions and kosher salt. Cook for 45 to 50 minutes, stirring occasionally, until the onions have reduced considerably and are soft, caramelized, and rich golden brown.
Sprinkle the flour over the caramelized onions and cook, stirring continuously, for 1 minute, until no dry flour remains.
Pour in the white wine and scrape the bottom of the skillet with a wooden spoon to release the browned bits. Simmer for 2 to 3 minutes, until the wine has reduced by approximately half.
Gradually stir in the beef broth, followed by the Worcestershire sauce, black pepper, thyme, and balsamic vinegar. Bring to a simmer and cook for 6 to 8 minutes, stirring occasionally, until the French onion sauce has thickened slightly but remains saucy.
Return the meatballs and any accumulated juices to the skillet. Spoon some of the caramelized onions and sauce over the meatballs and simmer uncovered for 3 to 5 minutes, until the meatballs are cooked through and reach 160°F (71°C) in the center.
Preheat the broiler. Sprinkle the freshly shredded Gruyère evenly over the meatballs and caramelized onions. Broil for 2 to 3 minutes, watching closely, until the Gruyère is melted.
Garnish with chopped fresh parsley, if desired. Serve the French onion meatballs over mashed potatoes or egg noodles, or with crusty bread for the onion sauce.