In a large skillet over medium-low heat, melt butter with olive oil. Add onions and salt. Cook 30–40 minutes, stirring occasionally, until deeply golden and soft. Stir balsamic vinegar if using and thyme. Set aside.
In a separate skillet over medium heat, brown ground beef. Drain excess grease. Stir in French onion soup mix, beef broth, Worcestershire sauce, and pepper. Simmer 3–5 minutes until slightly thickened. Set aside.
In a saucepan over medium heat, melt butter. Whisk in flour and cook 1–2 minutes. Slowly whisk in warm milk. Simmer, whisking frequently, until thickened, about 5–7 minutes. Stir in salt, pepper, and nutmeg. Turn off heat and stir in Gruyère.
Preheat oven to 375°F. Lightly grease a 9x13-inch baking dish.
Layer as follows: Thin layer of béchamel, lasagna noodles, French onion beef, caramelized onions, béchamel, sprinkle of Gruyère, and mozzarella.
Repeat layers, finishing with noodles, remaining béchamel, and remaining Gruyère and mozzarella.
Bake uncovered 35–45 minutes until bubbly and golden. Broil 2–3 minutes if desired. Let rest 10–15 minutes before slicing. Top with fresh thyme and enjoy!