I think the best way to deform your car would be with skeletal animation (see this sample and this one).
For example: have a "bone" (or two) for each door, the bonnet, the roof, the front, back, etc. And then you want to weight the vertices for that part of the car, to that bone, in an appropriate pattern (ie: some will have full weight, some might have partial weight). Then when your car gets hit - you move the bone for the section of the car that got hit inwards, towards the center.
It's not as nice as procedurally deforming the model. But it's a lot easier and your artist can then get things looking "just so". (And you can use the same system you might use for turning the wheels, etc.)
You probably also want to have two textures - a clean one and a dirty one. Then switch between the two in your pixel shader for different regions. This sample is probably a good place to start.
For breaking apart the model - I would suggest simply having different models for different parts. You could use the same bone structure so a car that breaks apart keeps the same damage deformation. (Or, alternately, have multiple root bones - one for the body, one for each door, etc, so they can be separated.)
For applying forces to make it fly apart (and getting nice matrices you can use to transform your parts) - you probably want to use a 3rd-party physics engine.
Finally: throw in a particle system for good measure.
This method should be pretty simple to implement for basic car damage in, say, a racing game. For something more severe, the same technique should still be viable - just with a lot more thought put into it.
The alternative is to rigging your model for damage is to do something procedural in your shader. This sample might be a good place to start - instead of shattering, you could move the vertices inwards depending on the direction of impact and their original position on the model. Although this is much harder - I wouldn't recommend it.