Is it possible to stay away from the level blueprint?

yes, and this is a great way to program, because you wind up developing modular portable code that can be easily adapted to a variety of situations. In your game mode or game instance you can build lists that are references to the objects you are looking for, and use those lists to execute game logic.

For example, on game mode begin play, ‘get all actors of class’ or ‘get all actors with interface’ can be used to return a list of actors that you are looking for, then iterate through those lists to find the one you’re looking for. to find the one you are looking for, use unique identifiers like actor tags (scroll all the way to bottom of the actor details to find these usually), or maybe even a variable in that actor that gives it a unique id to check against. make sure to include an ‘isValid’ check so you can return debug messages telling you when the game can’t find what you’re looking for.

depending on your familiarity of blueprints, player states are a good example of this type of coding, and include all kinds of unique player identity stuff without any actual persistent data up front.

hopefully this helps, or if not, feel free to post specific cases where the logic might be breaking.