In a large pot, melt the butter and add the onion. Sauté for 3–5 minutes, until soft.
Add the bone broth, broccoli, salt, pepper, and garlic. Stir so the broccoli is mostly covered by the broth.
Cover and bring to a boil. Cook for 10–15 minutes.
While that cooks, warm the milk slightly and whisk in the cornstarch until smooth.
Once the broccoli is mostly cooked and starting to soften, add in the milk mixture, cream cheese (or cottage cheese), and both cheeses.
Reduce heat to medium and stir frequently until everything is melted and fully combined. The broccoli will continue to break down as it cooks and the soup thickens.
Serve topped with elote corn dippers.