You could add empty blueprint actors as placeholders to represent your spawn points (instead of actually spawning the NPCs)
Then your blueprint can have the logic of spawning, instead of the theme file. You’d go through each spawn point position (by querying the blueprint actor you spawned from the theme file) and decide where to spawn and properly initialize them. I use this method for the shooter demo where a bunch of player start actors are scattered around the map and NPCs are spawned at runtime by picking a random PlayerStart actor that is not very near another character.
I’ll be adding a blackboard to the dungeon actor which you can use to save / load global data from different places (like your observer actor). It can be used to limit the no. of items spawned per level etc.