I'm putting this together to help the next version of civicrm. We needed a waiting list for events once they are full. Our needs will perhaps differ from a generic version but you have to start somewhere.
We started by detecting the state of the event with eventFull(). If it's full and the user is not already a participant OR in the waitinglist table, we give them a simple link which will add them to the waitinglist table.