The problems I encountered were centered around the AlignedStream class. Trying to read saves without the AlignedStreams caused the engine to crash with an unknown error.
This is most surprising... Did you also remove AlignedStreams from writing saves? I think some save or load functions were shared between saves and game data loading routines, so that have to be investigated carefully.
Also, did you manage to make script global data increase? I suspect that to be more important for game patching than new characters (but I don't know what Wadget Eye does with their patches)
Regarding the whole save thing, there is also a problem I was considering: the items that are not found in the save should logically be
reset to their initial game state, or they end up unchanged by loading the game. Of course, ideally their case should be fixed by script (hooks, as Snarky called the in the posts above). But resetting them as a temp solution would prevent bizzare issues, for example "new" characters standing where they stood before game restoration, and similar things.
Regarding save format, I would suggest to change the way save is loaded: instead of the game (engine) making expectations of every next piece of data, make save tell the engine what data follows. This may be achieved by splitting data into entity blocks, each having defined type, identifier and size written in the header. This way it will be easier for the engine to know which entities were read and which won't, and if there are "unknown" entities that don't belong to the game, and possibly pass this information to the script callbacks (hooks) to let game author deal with such occasions.
Of course it is not necessary to complete all of this in one turn, just to keep these points in mind.