Finally done it, using a vector for the direction based on the keys, like you said. I had tried this several times before but for some reason I couldn't get it to work. Maybe I wasn't adding the angles correctly, or maybe I was failing to move the player in the correct direction.
I'm now even using the speed to scale velocity along the angle, which also gives me the good old 8 directions movement.
velocity *= friction
if dir.x or dir.y:
var angle = dir.angle()
velocity = Vector2(sin(angle), cos(angle)) * (velocity.length()+accel)
Thanks.
EDIT: this also solves another problem: the player no longer moves faster diagonally.