Melt the unsalted butter in a large Dutch oven or heavy-bottomed pot over medium heat. Add the finely chopped onion, diced carrots, and diced celery, and cook for 6 to 8 minutes, stirring occasionally, until the vegetables have softened and the onion becomes translucent.
Stir in the minced garlic and cook for 1 minute until fragrant, then sprinkle the all-purpose flour over the vegetables and stir constantly for 1 minute to form a paste that coats all the vegetables.
Gradually pour in the vegetable broth while whisking constantly to prevent lumps from forming, then add the cubed potatoes, dried thyme, and bay leaf. Bring the soup to a simmer, then reduce the heat to low, cover the pot, and cook for 15 minutes until the potatoes are tender when pierced with a fork.
Stir in the whole milk, heavy cream, kosher salt, and black pepper, then add the chopped broccoli florets. Simmer uncovered for 5 to 7 minutes, stirring occasionally, until the broccoli is bright green and tender but still has a slight bite.
Remove the pot from the heat and discard the bay leaf. Taste the soup and adjust seasoning with additional salt and pepper if desired.