Systems deactivate when a ship is disabled, so unapply() should be getting called. Like, for example, burn drive turns off when a ship is knocked out. Or are you talking about when a ship is actually destroyed? Even so, unless we're talking about massive overkill that causes an immediate destruction that skips the "disabled" state, unapply() still should be get called...
There's an implicit assumption that the ShipSystemStats script only affects the stats of the ship. A global effect, imo, should be handled via a global combat script that checks whether a particular system is on. Is there an implementation/API reason that makes this impossible?