Thoroughly wash the broccoli and cut it into bite-sized florets. Peel and chop the stems into small pieces. Dice your onion, grate the carrots, and mince the garlic.
In a large Dutch oven or heavy-bottomed pot, melt the butter over medium heat. Add the diced onions and grated carrots, sautéing until the onions become translucent (approximately 5-6 minutes).
Add the minced garlic and cook for another 30 seconds until fragrant, being careful not to burn it.
Sprinkle the flour over the vegetable mixture and stir continuously for 1-2 minutes to create a roux. The mixture should look like a thick paste and smell slightly nutty when properly cooked.
Gradually whisk in the vegetable broth, ensuring no lumps form. Once incorporated, pour in the milk while continuing to whisk.
Add the chopped broccoli florets and stems, dijon mustard, and freshly grated nutmeg.
Bring the mixture to a gentle simmer, then reduce heat to medium-low. Cover and cook for 15-20 minutes or until the broccoli reaches your desired tenderness.
Optional: Use an immersion blender to pulse the soup a few times for a partially blended texture. Alternatively, transfer about 2 cups of soup to a standard blender, process until smooth, then return to the pot.
Reduce heat to low and add the freshly grated cheddar cheese one handful at a time, stirring after each addition until fully melted.
If using, stir in the half-and-half for added richness. Season with salt and freshly ground black pepper to taste.
Serve hot, garnished with extra shredded cheese and fresh herbs if desired.