First of all I realised that you check for the key GameHighscore on webstorage and then if it doesn't exist you create a key called Highscore, this way it will always overwrite Highscore, I guess you made a typo here. Fixed it.
I'm using Minor's capx as a starting point.
It has a continue variable in Menu eventsheet which I'll be using to spawn the correct powerup.
At the start of the game eventsheet I check if there's already a key called Checkpoint, if not continue = 0 (never passed that checkpoint), but if there is that key, that means sometime I've been past that point, so I set continue to 1.
Following the same principles, when spawing a power up, each 3 seconds I use continue = 0 > powerup1.... continue = 1 > powerup2.
Now to the setting part, when the player dies I verify if the currentDistance is greater of equal my checkpoint value(which you decide whatever you want), I also check if continue equals 0 , and if so I set if to 1(got past checkpoint). Checking if checkpoint equals 0 makes sure I haven't already passed by the checkpoint, because If it is 1 I don't need to do that again.
At the end I set the webstorage key "Checkpoint" to 1(I create a key), this one is the one used at the start. If you want your game to start over at each sessions remove this action, if you want the game to keep the score and checkpoint even after you close the browser leave it on.