Pat the beef dry and season generously with salt and pepper. Heat olive oil in a large Dutch oven over medium-high heat and sear the roast 4-5 minutes per side until browned. Remove and set aside.
Lower heat to medium. Add sliced onions with a pinch of salt; cook 15-20 minutes until deeply caramelized, stirring occasionally.
Add garlic for 1 minute, then sprinkle in flour and stir 2 minutes.
Deglaze with white wine, scraping browned bits. Add beef broth, Worcestershire, balsamic vinegar, thyme, and bay leaves. Simmer.
Return roast to pot, cover, and braise in a 300°F (150°C) oven for 2.5-3 hours until fork-tender. Shred or slice beef.
Preheat broiler. Top with shredded Gruyère cheese and broil 2-4 minutes until bubbly and golden. Garnish and serve.