It would be great to capture and restore all the bindings but that would cause a nightmare for all the nREPL and other middleware bindings that are present. This now makes me think that all nREPL middleware bindings should be scoped to a single binding holding a map and/or an atom so that they are distinct from the real bindings when you launch something like piggieback. Then piggieback could simply capture all the bindings on cljs-repl start and restore when a message comes in.
Another simpler solution would be a way of explicitly add bindings to the environment when we start the cljs-repl. We could do this with a binding piggiback/*extra-bindings* {'figwheel.main/*config* {}}