Are there any paradigms that describe how to save program state checkpoints that can be restored later?
In general you cannot do this. The state of your application might depend on the state of external systems, and you won't be able to go back. For example you can't go back to a previous saved value of time if your systems requires that your clock should be within a small value compared to other machines in the network.

So its not always possible, and when it is, it is definitely application specific.