All bookings in popular places or on popular dates are NON REFUNDABLE. As in "click and you will never see any of this money again" non-refundable. Very non-refundable. If I have to cancel, I lose all my money.
At the same time, hotels can cancel for little or no cost. They do not lose money.
I don't know what the right solution is, but I have a feeling this should be regulated at least a little bit (EU, take notice): I'd say totally non-refundable bookings should not exist. You should always be able to get at least some of your money back before the date the service starts. And if the other side cancels, they should pay a penalty, at least the same as the penalty I have to incur, possibly more to prevent schemes like the one described above.