I have an idea.
For that invisible car problem, one solution could be you could hide few hardware sprites behind the right edge, on the same y-coordinates as player software sprite, that would allow hardware sprite enemy car to smoothly be hidden under top pixels of player´s software sprite car, just before both cars will explode.
Result is it will look like hardware sprite car will slide under software sprite!
Hardware sprite is not visible through "transparent" pixels of player´s car though, but it´s not that big problem I think.
Of course that solution could cause problems when you are safely passing another car while one car is exactly in front of you, but I think you can easily overcome that problem by just swapping sprite plane numbers of enemy cars.
The car which you are passing must have the highest sprite plane priority, hidden sprites will have the second highest priority and the car in front of you will have the smallest priority.
When there are two enemy cars in front of you at the same time, that routine must see which car can be passed and which car is in front of you, by comparing x-coordinates of both enemy cars and player´s car.
This might be usable for Toni Galvez´s Buggy Boy fantasies too!
I would love to play that game on MSX1.