Melt the butter in a large Dutch oven or pot over medium heat. Add the onion and garlic and cook until tender, about 5 minutes. Whisk in the flour and cook until golden, 3 to 4 minutes, then gradually whisk in the half-and-half until smooth. Add the chicken broth, bay leaves and nutmeg, then season with salt and pepper and bring to a simmer. Reduce the heat to medium-low and cook, uncovered, until thickened, about 20 minutes.
Add the broccoli and carrot to the broth mixture and simmer until tender, about 20 minutes. Discard the bay leaves. Puree the soup in batches in a blender until smooth; you’ll still have flecks of carrot and broccoli. Return to the pot. (Or puree the soup in the pot with an immersion blender. If you are lucky enough to own one. Which I am not.)
Add the cheese to the soup and whisk over medium heat until melted. Add up to 3/4 cup water if the soup is too thick.