Have you seen Steering Behaviors For Autonomous Characters? I would consider a "CrowdPathFollowing" algorithm for staying on the track and avoiding collisions. You might be able to mix in a "Flow Field Following" behavior for drafting, passing and blocking - make the flow field follow the the player's past and projected path, but split around his current location.
/-------------\
----< [playerCar] >-----
\-------------/
That should cause the AI to tend to follow directly behind him and move directly in front to block, yet encourage clean passes.