If the car for some reason miss the point (ie it is pushed by another car), it tries to go back to that point before proceeding with the following.
Perhaps you should not think in terms of points, but rather in lines.


The CPU cars tend to align one after the other, and all follows the very same path
This could be avoided by giving each car different setups for stearing, speed (in curves or longer parts of road), breaking, pull ups etc.
Also, but this may get a bit harder. You want your oponents to act like a real racer. ie each driver wants to be first. You can't win if you stay behind other cars, so they should attempt to get past other cars.

As for avoiding obstacles, a basic detection setup, like detecting if theres something blocking your path within a few car lengths ahead, move out of the way accordingly. (You can also use this procedure to detect if an other car is ahead of you and want to go past it.)