Start the onions: Heat 3 tbsp butter and 2 tbsp olive oil in your cast iron skillet over medium heat. Add the sliced onions and a generous pinch of salt. Stir to coat. Reduce the heat to medium-low and cook, stirring every 5 minutes, for 40-45 minutes until deep mahogany brown.
Make the meatballs: While onions cook, combine ground beef, egg, breadcrumbs, minced garlic, Worcestershire sauce, 1 tsp salt, 1/2 tsp black pepper, and a pinch of red pepper flakes in a bowl. Mix gently with your hands. Roll into 12-14 meatballs (1.5 inches each).
Sear the meatballs: Heat a separate large skillet over medium-high heat with a splash of oil. Add meatballs in a single layer (don't crowd). Sear 2-3 minutes per side until browned all over. They don't need to be cooked through.
Build the sauce: Once onions are caramelized, pour in 1/4 cup beef broth and scrape the pan bottom to lift browned bits. Add remaining broth and thyme sprigs. Bring to a gentle simmer.
Combine: Nestle the seared meatballs into the onion broth. Cover and simmer on low heat for 15 minutes until meatballs are cooked through.
Add cheese: Preheat broiler. Remove thyme sprigs. Taste and adjust seasoning. Sprinkle grated Gruyere evenly over top. Transfer skillet to oven and broil 2-3 minutes until bubbly and golden brown. Watch closely.
Rest and serve: Let skillet rest 5 minutes. Serve with crusty bread, over egg noodles, or with roasted potatoes.