This is a complex problem and should be broken down into multiple smaller problems :
First: how to know that the player has passed a checkpoint.
Checking for overlap is a bad idea. If the player jumps or misses the checkpoint then it won't work.
A better solution is to compare the X coordinate of the checkpoint to the X coordinate of the player. I suppose you're making a side-scroller (otherwise, you can switch X with Y). So the player will pass when her X is greater than the checkpoint's X. Maybe throw in a flag to mark the checkpoint as passed.
Next :
"first, I want the user to be able to continue only onetime. meaning that when he dies first time and continue, the second time he does not have the option to continue again. Currently the continue windows appears everytime the player dies."
Have a global variable named "DeathCount" (initialized to zero), increment it whenever the player dies. Before you increment it, check if its value is equal to 1, if yes then show your game over window, if not, then just respawn the player.
Next mini-problem: Saving the progress
Well from a game design perspective. I'd say don't even bother. No one is going to bother saving their progress in an endless runner, especially if it's for mobile or browser.
Let's say you want that anyway, your solution works. The system's "save/load" functions will do the job just fine.
Next mini-problem: The death save
Use the WebStorage plugin to save a simple flag, let's call it "SaveIsValid", set it to 0 when the save slot is a death slot, and set it to 1 when it's ok for the player to continue the game.