In a large Dutch oven or heavy-bottomed pot, melt the unsalted butter over medium heat.
Add the sliced onions to the pot. Cook, stirring occasionally, for 45 to 50 minutes. If the onions begin to stick or burn, reduce the heat to medium-low. The onions should achieve a deep mahogany color and a jam-like consistency; this slow caramelization is the key to depth of flavor without wine.
Add the minced garlic and cook for 1 minute until fragrant.
Sprinkle the all-purpose flour over the onions and stir constantly for 2 minutes to cook out the raw flour taste and create a light roux.
Pour in the balsamic vinegar and Worcestershire sauce, using a wooden spoon to scrape up any browned bits (fond) from the bottom of the pot. This deglazing process replaces the acidity typically provided by wine.
Slowly whisk in the beef bone broth. Add the fresh thyme sprigs and bay leaves.
Increase the heat to medium-high and bring to a gentle boil, then reduce the heat to low and simmer, uncovered, for 25 to 30 minutes to allow the flavors to meld.
While the soup simmers, preheat your oven broiler and arrange baguette slices on a baking sheet. Toast the bread for 1-2 minutes per side until golden brown.
Discard the thyme stems and bay leaves. Season the soup with salt and black pepper to taste.
Ladle the hot soup into oven-safe bowls. Top each bowl with a slice of toasted bread and a generous handful of shredded Gruyère cheese.
Place the bowls on a baking sheet and broil for 3 to 5 minutes, or until the cheese is melted, bubbly, and slightly browned. Serve immediately.