Tango,
For a contract to be valid, nothing has to change hands immediately, it can state a future date for the exchange. For example, I could offer you $10 to wash my car on December 1, and if you agree, then we are both stuck to that contract even though I won't pay you until after the work is done. In the case of a full fare airline ticket, that contract allows you to back out of it any time before the flight. That's why it costs so much more. However, a contract can't be legally valid if it is one sided. An exchange must be made. If I offer to give you $10 on December 1 with nothing required from you in return, and you accept, this is not a binding contract. I do not have to give you the money. That is why a $29 airfare must be honored, and a $0 hotel room doesn't. If it were $.05 instead of $0, then it would be valid because both sides would get something and exchange something. Both parties must get something out of the deal.