Melt butter in a heavy-bottomed saucepan over very low heat. When melted, add onions and cook, stirring occasionally, until deep brown, but not burned, between 60 and 90 minutes. Transfer onions to a small bowl.
Add carrots to saucepan and cook over medium heat until tender, about 10 minutes. Add broth and simmer for 30 minutes. Strain through a fine mesh sieve, reserving broth and discarding solids.
Place onions and broth back in saucepan and bring to a boil over medium heat.
Taste and season with salt and pepper, reduce to a simmer.
Toast bread. Top with cheese and place under the broiler until melted and bubbly.
Serve soup in bowls, floating the toasted bread and cheese on top.