Hmm, after a second look, there might be an easier fix. Change:

Code:

if(key_w == off) //if you let off on the gas...
{
accel -= .5; //decelerate
c_move(my,vector(accel,0,0),nullvector,glide);
if(accel <= 1) //stop decelerating when not moving
{
accel = 0;
}
if(accel >= 1) //set up values for speedometer
{
absSpeed = accel;
}
}



to this:

Code:

if(key_w == off) //if you let off on the gas...
{
accel -= .5; //decelerate
if(accel <= 1) //stop decelerating when not moving
{
accel = 0;
}
if(accel >= 1) //set up values for speedometer
{
absSpeed = accel;
}
c_move(my,vector(accel,0,0),nullvector,glide);

}



See what changed? This way, the updated acceleration isn't applied until after the check to make sure it doesn't go negative. That should keep your car from going backwards at the start.

There are other ways to approach it too. You could do something like:

Code:

if(key_w == off && accel > 0)
{
...
}



So that it's only executed if the car is already accelerating forward when key_w is off.

Your code for slowing down the reverse speed when the user lets up the key might be a little awkward since you're switching between the accel and reverse variable.