This soup is super creamy in texture, but it contains very little actual cream. The butter and flour mixture -- what's called a roux -- gives it body and silkiness.
In a medium pot, melt butter over medium. Add onion and cook, stirring occasionally, until softened, 8 minutes.
Add flour and cook, stirring, until combined, 1 minute.
Whisking constantly, add broth and 1 cup water and bring to a boil over high. Reduce heat and simmer, whisking occasionally, 10 minutes.
Add carrots and bring to a simmer. Cook until carrots are very tender, 20 minutes.
Transfer mixture to a large bowl. In batches, fill a blender halfway with mixture and puree until smooth; to allow heat to escape, remove cap from hole in lid, cover lid with a dish towel, and hold down firmly while blending. Return soup to pot as pureed.
Add buttermilk and heat over medium until warmed through. Season with salt and pepper. Thin with broth or water, if desired.
To store soup, let cool, then cover and refrigerate, up to 1 day.