When I managed the point of sale software for an electronics retailer a decade ago, we had the raincheck feature in our software. It was mostly used as a courtesy to customers, a carry-over from the old days.
The concept was pretty much replaced by the cashier's ability to either order online for the customer, or transfer from another store to be picked up by the customer when it arrived. You have to figure that if there is no inventory to fulfill either an online order, transfer from sibling store, or to complete an off-the-shelf purchase, then the promotion has already fulfilled its purpose.
Also, with today's fast-paced multi-channel retail structure, most promotions have an expiration date. Raincheck + Expired promotion = frustrated customer. So the simple solution is to remove rainchecks.
For more persistent promotions, backorders would be allowed, IF AND ONLY IF the retailer knew more of the same inventory would be coming soon. This means the retailer takes payment at the time of customer ordering, so their financial risk is low.