Melt the butter in a large pot over medium heat. Add the onion and cook 3–4 minutes, until soft and translucent. Add the garlic and cook 30 seconds more.
Sprinkle in the flour and whisk constantly for 1–2 minutes, until it smells nutty and looks like wet sand. Don't let it brown.
Pour in the chicken broth in a thin stream, whisking the whole time. Once smooth, whisk in the half-and-half.
Add the broccoli, carrot, smoked paprika, salt, and pepper. Reduce heat to low, cover, and simmer 15–20 minutes, until the broccoli is fork-tender. Chop the broccoli and shred the cheese during this window if you haven't already.
Take the pot off the heat completely and let it sit 2 minutes. The soup should be hot but not bubbling. This is the step that prevents grainy cheese.
Stir in the American cheese until it disappears, then add the cheddar in three or four handfuls, stirring each fully in before adding the next.
Taste and add salt as needed — it will likely want more. Serve immediately.