Restaurants which generally sell out have an interesting dilemma. In principle they could make more money with higher prices, but then they'd risk not selling out, and empty seats would quickly wipe out any revenue gains from raised prices, not to mention harming that elusive 'buzz'. In practice such restaurants generally wind up leaving some money on the table, no pun intended, and take the stability of always selling out over the potential of higher revenues.
I've come up with a variant on dutch auctions which solves this problem quite beautifully. The restaurant continues to charge the same amounts it does currently, with the same menu, but there's a 'seating fee' for sitting down which might be charged if the restaurant sells out in advance. The amount of the seating fee is determined by when the restaurant becomes completely booked, with the fee going down the later the selling out happens, possibly going down to zero at the end. By making a reservation when the potential seating fee is a certain amount, a customer is declaring that they're willing to pay the seating fee for that time period if it is necessary, but they aren't penalized for making an early reservation unless it would have been necessary to do an early reservation to get a seat. By waiting to make a reservation until later, a customer is declaring that they are unwilling to pay a higher price, but also allowing for the possibility that the restaurant will become fully booked and they won't get a seat. One of the nice features of this system is that the reservation system is essentially unchanged, allowing for trivial support of reserving particular time slots and tables.
This system also works for concerts and other events which have the potential to sell out.