Roast poblano peppers directly over a gas flame or under a broiler, turning occasionally, until skins are charred and blistered, about 5 minutes. Place in a bowl, cover with plastic wrap, and let steam for 10 minutes. Then peel off skins, remove stems and seeds, and chop roughly.
In a large pot, melt butter over medium heat. Add onion and cook until softened, about 5 minutes. Add garlic and cook 1 minute more.
Add chopped poblanos, broth, cumin, salt, and pepper. Bring to a boil, then reduce heat and simmer for 15 minutes.
Using an immersion blender, puree the soup until smooth. Alternatively, carefully transfer to a blender in batches and blend until smooth, then return to pot.
Stir in heavy cream and heat through over low heat, about 5 minutes. Do not boil. Adjust seasoning to taste.
Ladle into bowls, top with a dollop of sour cream and a sprinkle of cilantro. Serve hot.
Tips
For extra smokiness, add a chipotle pepper in adobo sauce when simmering.
Soup can be made ahead and refrigerated for up to 3 days; reheat gently.
To make it vegan, use vegetable broth, substitute coconut cream for heavy cream, and omit sour cream or use vegan sour cream.