Combine Ingredients: In a large bowl, mix the ground beef, panko breadcrumbs, milk, egg, Worcestershire sauce, dried thyme, garlic powder, onion powder, black pepper, and Parmesan cheese. Mix until just combined, being careful not to overwork the mixture.
Shape the Meatballs: Roll the mixture into 1 1/2-inch meatballs (about 20–24 meatballs). Place them on a baking sheet or plate and set aside.
Cook the Meatballs: Heat a large skillet over medium heat and add a drizzle of oil. Cook the meatballs in batches until browned on all sides, about 5–6 minutes. Remove and set aside (they will finish cooking in the sauce).
Caramelize the Onions: In the same skillet, melt the butter over medium heat. Add the sliced onions and a pinch of salt. Cook, stirring occasionally, until the onions are deeply golden and caramelized, about 20 minutes.
Create the Roux: Stir in the flour and cook for 1–2 minutes. Gradually add the beef broth, whisking constantly to avoid lumps.
Enhance the Flavor: Add the fresh thyme, Dijon mustard, and a touch of black pepper. Bring to a gentle simmer, allowing the sauce to thicken slightly.
Add the Meatballs: Return the meatballs to the skillet, nestling them into the sauce. Cover and simmer for 10–12 minutes, until the meatballs are cooked through.
Add the Cheese: Sprinkle the Gruyère and mozzarella cheeses evenly over the meatballs. Cover and cook for another 2–3 minutes, until the cheese is melted and bubbly.
Garnish and Serve: Serve hot, garnished with extra thyme leaves, over mashed potatoes, pasta, or crusty bread.