For the visual portion (skids and such) the canvas object is the way to go. It takes as much space as you'd expect a large image to take so it may use a lot of your vram, but whatever. If you find that the canvas is taking too much vram you can use a smaller canvas scaled up.
For the terrain info (traction, height, etc...) I would use a large array the size of the track to store the info of each pixel or so. It will likely be time consuming at runtime filling the array with the whole track info, but it only would need to be done at the start of the track then after that only what the cars are touching would get updated so it will be very fast. You could also use a smaller scaled array for the data to save on cpu time if needed.
A google search for "2d car physics" yields some code for more realistic car physics. The only catch is it's in c++ but it's useful for gleaning the algorithm and math involved. The more appealing one takes the rotation speed and angle of the tires into consideration with fiction to the ground and applies a force to the car body.