Noah,
There are a few ways you can do this, and the track you are on is what I would consider the middle ground.
In the most basic manner, you could use the new calendar function to have a 'reservations' calendar. So users can visually see when a vehicle is already in use.
Or you can continue on the path you are on with multiple joined tables. However, you will lose the ability to 'reject' a request if it is already being used. In order to run conflict evaluations you will need to have some type of script involved, which most likely will turn into a calendar type UI.
The custom route is possible, and I've seen it done, but most of the time, a well designed calendar report will accomplish this as well.
If you want more details on either route, let me know.
Cheers,