When it comes to a Choicescript based solution, what immediately springs to mind is a clever use of labels, *goto and duplicate variables. You basically create checkpoints throughout the game (at the end of chapters for example) and create a duplicate "save" variable at that point. For example, if you have a variable agility you might also make a variable save_agility. So when "saving" you'd do something along the lines of
*set save_agility agility
This makes sure that save_agility = agility and essentially captures what your progress was at the save point.
If a player wants to load a save, you just use *goto to take back to that checkpoint label. You'd also need to load and *set all your variables to their save counterparts e.g.
*set agility save_agility
As you can imagine, this can be more than a little tedious as you'd need to create a save counterpart for every variable, not just those associated with stats but also those associated with plot or checks of any kind.
I hope that made sense? If not, here's a topic created by @Sashira that may do a better job of explaining.
That's something you won't really have to worry about since CoG always go back to the point you left at when you return from exiting a game. At least, that's been my experience.