This would share some characteristics with the Event Calendar Pro module, which can take paid or free bookings for pre-defined events. However that module does not include any concept of the user deciding what time span their booking should occupy (except as a free text note you could require for each booking). Also, you'd have to create an "event" for every opening time.
I think you need a custom feature. Alternatively there are various online restaurant booking systems already out there on the market, and you may be able to embed one of these in a mojoPortal site, or link to it gracefully.