This sounds very similar to my old microcontroller projects from school, sampling and playing back.
This is my solution:
Basically, you need to identify the parameters you want to sample, e.g: a objects position and health.
You will need to create dictionary/array system to hold your parameters.
Each sample, or moment in time can be added to your array system on the update method.
Your ccTime dt (1/60) etc, will be the sample time between samples.
You will need a modulo based loop system to write to the array system, limiting the maximum size of the array.
If your sample time is 1/60, then 60 samples will be 1 second of gameplay.
If you want to limit your 'going back in time' ability to 10 seconds, then you will need 600 array elements.
If you want your hero to go back in time 10 seconds, you will now essentially want to play-back the data in reverse order (from the latest sample).
Now during playback, you simple take the x.y. coordinates from your array and plug it into your heros property stream. Similarly you can plug your health points into the heroes property stream.
This is how I would implement backward time-travel, I dont think the overhead would be very large. Just make sure you set up the modulo loop correctly so your array doesnt grow infinitely large through gameplay.
Olmeister~
EDIT: This method will work with recording your actions, whatever property your actions alter, (position, scale, rotation) etc, will be recorded by your array/system.
Answering your question to reuse your original actions, I personally wouldnt use actions to go back in time, sounds so messy.
I think you need to distinguish if reusing your actions is really the most efficient and code-clean method.
Also, if you want to go back in time faster than of 1x playback speed, you have two options,
Instead of recording every 1/60, you could record every 1/30, this will double the playback speed etc.