As seen in D1716, SM45 will be more mindful of the "permanent" characters of JS globals. More precisely, it will enforce property attributes, that are documented here.
As a result, properties that have the DontDelete attribute cannot be hotloaded anymore. (The tradeoff is that, now that SM enforces more things, the JIT compiler can make more assumptions, and get performance improvements).
I think the most reasonable solution is to make simulation constants (that is, the scripted component prototypes, and globals such as cheats, sim commands,...) deletable (!DontDelete) but still read-only (ReadOnly). This way, they are still protected to some extend (one cannot redefine them directly, they must be deleted, then recreated) and can still be modified upon hotloading. This patch implements this.
I am open to suggestions on the conceptual level. After all my research I think that the only sensible way to do hotloading while keeping protection against deletion would be to reload the simulation script interface entirely upon hotloading. This is technically possible I believe, and it would allow one to unload some components by deleting them, but it would mean rewriting most of the component manager. I don't think it is reasonable.