“Advanced character physics” is a nice approach, but IMHO for GTA style physics you might be better off with a more traditional rigid body simulation.
The original 2.5d GTA games actually had quite a complicated engine simulation - IIRC it tracked things like torque, horsepower and revs, and for the actual cars the wheel position and orientation affected the forces that would be applied (rear-wheel-drive car handled differently from a front-wheel drive one).
If you don’t want to delve into the icky physics details yourself it might be easier to use a physics library (either a 2d one with gravity turned off or a full 3d one where you restrict movement in the z axis).
If you want to do it yourself I’d start begin simply and build up. Start with the basic equations of motion and you can have a sprite with basic speed and acceleration applied based on key input. Basic circle vs. circle collision detection is easy, and so detecting when two objects intersect and altering their speed will get you something akin to snooker balls. Add in orientation, upgrade to rotated rectangles rather than circles, add friction from wheels, etc. etc.
Also more reading here: http://www.java-gaming.org/index.php/topic,19653.0.html