To get different surfaces should be fairly simple, multiply your acceleration value and your torque value by a value between 0 and 1 depending on the traction you want. This will mean your car continues in its current state much more than being affected by forwards drive and steering. However, this assumes you have a relatively low damping that only damps for wind resistance and surface friction.
I suspect you may be using more damping (a low value) because it doesn't sound as if you're manually damping your torque and acceleration, which you should to avoid ever-accelerating angular and forwards velocity (rather than using a lot of global damping). So pick a maximum angular velocity and when actual angular velocity reaches this value, any torque in that direction should be zero. Similarly for acceleration.
To simulate a higher "slow-down" effect when the car is going sideways, use the cosine of the angle between the direction of travel and direction of facing.
Before trying this though you should 'correct' your orientation. I notice from the snippet of code you posted that your car is facing upwards (along the positive Y-axis) when angle is zero. In mathematics the convention is that an angle of zero represents a positive x and zero y and as angle increases positively, the value rotates anti-clockwise. Therefore you should point your car to the right at zero degrees and accelerate it along the x-axis. This will make all the maths work as expected

So to get the cosine of the difference between the angles, take the dot product of carBody->rot and normalized carBody->v - this will give you a value from -1 to 1 that you can multiply by a force relative to the magnitude of velocity (i.e. the faster the car is going, the greater the "slow-down" from friction). If you have implemented the different surfaces mentioned above, this value too can be multiplied by the surface traction so slippery surfaces slow it down less.
J