Preheat oven to 425°F and line a rimmed baking sheet with parchment paper.
Peel the butternut squash, halve lengthwise, scoop out seeds, and cut into 1-inch cubes.
Spread cubed squash and chopped onion on prepared baking sheet. Drizzle with 2 tablespoons olive oil, toss to coat, and season generously with salt and pepper. Tuck unpeeled garlic cloves into the corner of the pan.
Roast for 30-35 minutes, stirring once halfway through, until squash is fork-tender and edges are golden brown and caramelized.
Remove from oven, cool for 5 minutes, then squeeze roasted garlic cloves from their skins and set aside with the squash.
While squash roasts, warm remaining 1 tablespoon olive oil in Dutch oven over medium heat. Add sage leaves and sizzle for 1 minute, then remove and discard sage.
Transfer roasted squash, onion, and garlic to the pot with infused oil. Pour in broth.
Using an immersion blender, puree until completely smooth. (Use a standing blender in batches if needed.)
Bring pureed soup to a gentle simmer over medium-low heat, stirring occasionally. Stir in cinnamon, nutmeg, and cayenne (if using). Simmer uncovered for 10 minutes.
Taste and adjust salt and pepper. Remove from heat and stir in heavy cream, if using.
Ladle into bowls, top with roasted pepitas, and serve hot with crusty bread for dipping.