Peel onions and shallots, removing first layer if it seems tough, and if your shallot lobes are wider than 2 in., halve them lengthwise.
In a large, wide pot, melt 2 tbsp. butter with the thyme, bay, and sage over medium-high heat. Add onions and shallots and stir to coat. Season with a few pinches of salt and pepper.
Add port, vinegar, honey, raisins, and cherries, then pour in 2 cups stock. When everything has begun to simmer, lower heat, cover, and cook 10 minutes.
Stir onions and cook, uncovered, until liquid has thickened to a syrupy glaze and onions and shallots are tender, about 20 minutes. Pierce a few of the larger pieces with the tip of a knife to make sure they are tender. If they don't seem soft enough, add a little more broth, cover pan, and cook until tender.
Lift onions into a bowl with a slotted spoon. Add remaining 2 tbsp. butter to pot, increase heat to high, and reduce liquid until syrupy, 5 to 8 minutes.
Return onions to pot and turn to coat them in the glaze. Serve warm or at room temperature, topped with thyme sprigs and sage leaves.
Make ahead: Up to 2 days. Reheat on low, covered.