Your highest xspeed is ±6.0 p/f and the highest yspeed is ±10.0 p/f (p/f = pixel/frame). The acceleration of the xspeed is ±1.9 p/f² and the acceleration of the yspeed is ±2.75 p/f². Though, when flipping the yspeed starts at ±6.75.
Moving, xspeed: 0.0 > 1.9 > 3.8 > 5.4 > 6.0 > 6.0 > ...
Dropping, yspeed: 2.75 > 5.5 > 8.25 > 10.0 > 10.0 > ...
Flipping, yspeed: 6.75 > 9.5 > 10.0 > 10.0 > ...
When you held a direction for at least the past 5 frames, you decelerate with ±1.1 p/f², when under 5 frames and stopping or moving in another direction, your next speed is either 0.0 or 1.9 in that other direction.
Input: >>>..... xspeed: 6.0 > 6.0 > 6.0 > 4.9 > 3.8 > 2.7 > 1.6 > 0.0
Input: >>>.>... xspeed: 6.0 > 6.0 > 6.0 > 4.9 > 6.0 > 0.0 > 0.0 > 0.0
The speed gets added to the position and then rounded towards 0.
The game allows you to flip even one frame after you left the ground, which might be the reason why you can go through inversion planes (the lines that flip you automatically) when they are close to the ground.
Platformers usually set your speed to 0 once you hit an obstacle, VVVVVV is a bit different.
Your speed is adjusted to the distance to the obstacle. For horizontal movement that means if it is 5 blocks away, your speed is set to 5.0. If now the obstacle is away (e.g. you got past it because you were moving vertically, too) your next speed will be 6.0 and you didn't lose time even though you hit the obstacle!
The same goes with vertical movement to the point where it can actually save time to slow down horizontally (usually when there are small stairs).
Yes, optimizing this game is a lot of work :D.
No, graphical glitches do not affect the hitbox.