I'm not sure if your keeping up with the VSS count, but if you start missing pulses, the aliaing will kill your control. I would build a test circuit with an LCD and make sure that the VSS count works to 100mph.
Then I think you need a PID or similar. What you appear to be doing is if the error increases over a fixed time, your output increases in a fixed manner. I would expect it to lag badly on a steep hill. I would use an equation to increase your output, based on your error like Propoutput=(sp-vss)*gain. Ideally you add a time component in this like, add error to errorvar 10 times, then add error to errorvar , multiply the errorvar by .9. then output = Propoutput +errorvar. on every loop it adds the current error and divides to give you the average of 10. This will give you a weighted increasing output as the error increases over time and decrease as the average error decreases.
So the equation is output = Propoutput*gain + average error*gain