Soften the aromatics: In a large pot over medium heat, melt the butter. Add the onion and carrots with a pinch of salt. Cook, stirring occasionally, until softened and lightly translucent, about 5–7 minutes.
Add the garlic and cook 30 seconds, just until fragrant.
Make the roux: Sprinkle the flour over the vegetables and stir to coat. Cook, stirring constantly, for 1–2 minutes. This cooks off the raw flour taste and builds a base for a silky texture.
Add liquids: Slowly whisk in the broth, a little at a time, to prevent lumps.
Add the milk, Dijon, nutmeg, and bay leaf. Bring to a gentle simmer, not a boil, stirring often.
Cook the broccoli: Stir in the broccoli (including peeled, diced stems). Simmer uncovered until the broccoli is tender but still bright, 10–12 minutes.
Adjust heat as needed to keep it at a gentle bubble.
Adjust texture: For a smoother soup, use an immersion blender to blend briefly in the pot. For a chunkier soup, leave it as is or blend only a portion. Remove the bay leaf.
Add the cheese: Take the pot off heat.
Gradually add the cheddar by small handfuls, stirring until fully melted after each addition. Return to very low heat if needed, but do not boil. Season to taste with salt, pepper, and red pepper flakes if using.
Serve: Ladle into bowls and garnish with chopped chives or parsley.
Enjoy with toasted bread or a simple green salad.