Super cool idea!
I think the input handling could use a little bit more work though.
You could use a queue of inputs so that no button press is lost. Right now only the last input is considered every step which makes multiple turns in quick succession quite difficult. It is also possible to make a 180 degree turn right now by pressing two buttons between two frames.
For example if you're moving down and then press left and up before the next movement you loose if the snake is 2 blocks or longer.