Melt the butter in a large pot or Dutch oven over medium heat. Add the sliced onions, season them with salt and pepper. Cook for about 5 minutes then reduce heat to medium low. Cook, stirring occasionally, until caramelized, approximately 30 - 45 minutes.
Once the onions are caramelized to a rich golden brown color, add in the red wine and balsamic vinegar. Gently scrape the browned bits off the bottom with a spatula.
Add the beef broth, bay leaves, garlic powder and thyme. Season with salt and black pepper, to taste. Stir to combine.
Increase heat to high and bring to a boil, then reduce heat to medium-low. Loosely cover the pot with a lid and simmer, stirring occasionally, for about two hours.
Remove from heat, stir in the Worcestershire sauce and discard the thyme stems and bay leaves.
Divide the soup between four large oven-safe ramekins or bowl. Top with slices of the Gruyère cheese, followed by the freshly grated Parmesan cheese.
Place top oven rack in the second position from top and set the broiler to high.
Arrange ramekins on a large, rimmed baking sheet and place on the top oven rack. Broil until the cheese is melted and golden brown, approximately 6 - 8 minutes. Remove from oven and serve hot garnished with a few fresh thyme leaves. Enjoy!