The only solution is to periodically read back and save (to main memory, or disk storage) the contents of the buffers that you don't want to lose. You'll still lose the last N seconds of computation, but that's better than losing everything.

Readback will be pretty slow, and I don't think that for a majority of realtime GPGPU applications it would be a feasible choice.