If you wanted to do hourly, accurate (-> atomic) resets, so without losing data, you're gonna need a version of Reset() that returns the state just before it's being discarded.
Also, Reset() should work recursively (which it doesn't do right now).
Being synchronous shouldn't be that big of a deal (it's gonna be reasonably fast and won't
The question is whether we'll want children to be deleted or reset as well.
Simply calling Reset() on them too would have the advantage that the instances returned by goref.GetInstance() andGoRef.GetChild() would remain the same before and after Reset() was called.