if a coinbase reward isn't fully spent, can the coins ever be recovered? If a pool mines a block and is mistakenly rewarding miners with less coins than they should be given, is it possible for others to recover those coins somehow? Or are they lost forever?

For example, if the reward should be 50 BTC and the pool pays everyone a total of 5 (because the script has a bug and everyone's payout is divided by 10), is it possible for the other 45 BTC to be recovered?
No, the remainder of the reward is lost.

The bitcoin protocol includes a check which rejects a block that claims a bigger reward than 'current block reward + transaction fees'. Thus, inevitably follows that any rewards unclaimed in the coinbase transaction cannot be claimed at a later time.