Pot Noodle,
I've had a look at this and noticed a few things. When the gear shifts up, the speed actually decreases as the gear shifts, which is a bit odd. The way you're handling the whole transmission system seems a little over complex to me. I'd probably rewrite it and try to make it simpler if I were you. You should be able to totally do away the GearTable table and the GearAccel stuff. I've had a play around with it in its current state, but any changes I make have a lot of knock-on effect throughout the program (track flying at crazy speed or running really slowly).
I'd probably have a global acceleration variable that acts as an RPM modifier. As the UP key is held down, the acceleration factor gradually increases up to a set threshold, and gradually decreases when the UP key is released. When the DOWN key is held (decelerate), the acceleration factor would decrease at a greater rate. You might want to have both an acceleration factor and deceleration factor variable and use these together to determine the rate at which the RPM is modified, but this might not be necessary, I'd try without it first.
As far as gear changes, I'd check the current RPM and if it's above a certain level, change the gear up, below a certain level, change the gear down. The RPM rate that causes a gear change would be different depending on current gear, so you'll need to take the current gear into account when determining this threshold. You should be able to come up with a formula to control this without relying on lookup tables.
I'd concentrate on getting the numbers working properly and ignore the effect on the track speed at first. Once the RPM, Gears and MPH are playing nicely together, you can adjust the track movement to suit.
I hope this helps a little bit, sorry I don't have a magic fix

p.s. It's coming along nicely though and looks great so far.