Simulating NPC persistence across levels

There must be a simple solution to this, but I’ve been slamming my head against it for the last week without much progress. In short, I’m optimizing my levels a lot like Skyrim, where the world is divided into tons and tons of small streamed levels, and when you enter a new streamed area, it checks what NPCs are supposed to be there, and configures them so it looks like they were there all along.

I’ve been accomplishing this by making a struct for each streamed area, and giving that struct an array of each resource-granting node (food sources, work sources) inside that area, so all the overarching AI routine has to do is check which sector an NPC is in, determine what unoccupied resource nodes are in that sector, and either assign the NPC to a node or instruct it to move to a new sector. That works fine for static NPCs, but where I’m having trouble is convincingly simulating movement within an unloaded sector- movement doesn’t occupy any nods, so I have no references I can move them towards.

The best solution I’ve come up with is to manually place maneuver nodes at every entrance and exit, but this is quickly turning into a level design nightmare. Right now, for each streamed level I need to place a Sector node, child Resource nodes to it, and ensure the Sector node has a unique ID. If I were to follow my suggestion of maneuver nodes, now I additionally need to manually demarcate every entrance and exit once for each level that shares that transition point, and I’m looking at high hundreds to low thousands of manually-configured reference points.

So is there a better way to do this? I feel like if the process is getting this finicky, my approach is likely not fundamentally performant in the first place.