For instance, Jumper is terrific for verifying a viable path exists from spawnpoint to endpoint for the player.
The general concept is that, during level generation, every room has a door to every connected room. Before obstacle population, random rooms are chosen from within a function leveraging Jumper, checking to confirm that the rooms are accessible from the spawnpoint of the player:
If the random room is not accessible, then the function gets called again until a valid room is found to place the endpoint. After the endpoint room is confirmed, additional obstacles are populated.
After the exit path is routed and set, the path “tiles” are locked and no impenetrable obstacles are placed on them, while destructible environments are fair game. I've always been a fan of level challenges being balanced between combat and avoidance.
Here's a quick peek at the pathfinding call; not that interesting, but just in case you were curious: