Hi Podge,
This would be a custom jobbie for the most part on a few key points:
1. A new page type for each rental item
2. A new page type for holding and displaying a list view of rental items.
This tutorial should help with these two: http://doc.silverstripe.com/doku.php?id=tutorial:5-dataobject-relationship-management
I used the above tutorial to build a similar solution for a client who sells travel tour packages. Each tour had a (huge) group of custom fields. I also added a new class for Tour Dates, which is a one-many relationship (again, see that tutorial) so uses can see availability.
The big difference is, my client didn't require a search by date, and the dates were set ranges (e.g. no availability checking is done) so:
3. A custom method in your search page that returns an object based on criteria. This can be acheived by using DataObject::get(), the details of which can be found here: http://api.silverstripe.com/sapphire/core/DataObject.html#get. I havn't implemented something like this before, so I am unsure of how to actually implement it sorry. Someone else might have some ideas or a different method. Personally, I would make a custom search page just for this purpose, so your general search is still usable.
4. Booking - again, I'm having to do a similar setup for my client, however they have only paid to have provisional booking details emailed to them and payments made manually. This suits them. What I did was on the Tour detail page (in your case the Rental Detail page) I have a big booking button that is simply a link with the id of the tour in the url. The subsquent page (a type I called TourBooking) uses that ID to pull out all the info for the tour using DataObject::get_by_id: http://api.silverstripe.com/sapphire/core/DataObject.html#get_by_id. I then use this to manually create a form with selectable elements pertaining to the Tour. (Like add-ons, date requested etc). This form then emails the booking details and saves a copy of it in plain text. Again, the client didn't pay for full integration of bookings to the CMS. You however, will need to do this, otherwise availabilty checking won't be possible.
5. Calendar - if you mean in the traditional 28/31 day displayed calendar, this would be a large job. I don't know if a plugin of sorts is available as yet. A very cool plugin to build would be Google Calendar integration however.
So yes, Silverstripe can do this, but be prepared for a learning curve and possible delays as the answers are not always apparent at first. My development has certainly had some hitches, but still a damn sight faster than trying to do the same from scratch, or Drupal (which is my old CMS of choice). I am still a week or so away from completion, but I'll be happy to share some of the code with you if it helps to get you understand the system faster. But the tutorial above formed the base of my entire customization.
Cheers
Aaron