Positions and velocities need to be adjusted when replicating instead of just copying over. They need to be incremented based on how long the physics packet took to get to the server and also how long it took to get to the client. Not only would this enhance gameplay but it would also allow for smooth client based collision and will prevent things such as player vehicles getting stuck inside others. How this would work is for example: people should actually be further ahead on one client than they are on theirs. That way if two people collide head-on, they will bounce back at seemingly the same time (from the client physics)
Red car is the clients, blue car is the other clients
It would also reduce visual lag when racing other players
Either that or physics will be handled locally also so when they hit the car they bounce back until the packet is received. This should at least be optional in order to make replication smoother and gameplay less laggy. This should also work for the server side, that way when colliding with a server sided object, it will occur locally first, then it should be moving already when receiving server data