Booking/Reservation system
As far as 'setting availablity' goes, one could choose to make a 'services' section with a Matrix field that contains a DateTimeField. That way, the client can create a new Matrix Block for each available time span. The {% cache %} tag will help you in speeding this up on the frontend.

For booking, you could:


A: Make a 'bookings' section, with a related content field 'service'. Fill this section with a frontend Entry form, set post and expiry dates to the time span of the visitor's choice. You could now display a list of bookings on the frontend (behind a login), or have your client manage bookings through the CP's content tab.
B: Make a plugin to handle bookings. This would be my preferred approach.


To handle payments, you could use an existing plugin (Charge, for example) or build your own.