The reason to not do that was intentional. By holding onto the state object itself, we can avoid needing to sync up the state's metadata with the user's state metadata all the time. The alternative is to just sync them up when the sandbox run is ending, but I would like to avoid that for two reasons:
  - the sandbox run can end in more than one way (and more ways could happen later)
  - before syncing them up, there is no guarantee that the user state metadata and the state metadata are the same, so if something was using the user's state metadata during the interaction machine run, it could be looking at outdated data.