As sftrabbit mentioned, this is a perfect application for a state machine.
Essentially, you have a sort of tree structure. Each leaf/node contains information about the current state, and rules for progressing to the next state. Each node may contain multiple exits, depending on how complex you need your plot/play flow to be.
A good, very loose analog to this is a Choose Your Own Adventure book. Each page contains some text describing part of the story, and decisions that the player can make. Each decision leads to another page. Some pages may link back to previously-visited pages, etc.
The old text-based adventure games like Zork and Leather Goddesses of Phobos, and the infamous Sierra *Quest games (SpaceQuest starring Roger Wilco the space janitor is one of my favorites) used a very simple version of this type of system. Each room in a map was a state, with exits that linked to other states or rooms. Acquiring an item set a flag in a global state object. Each room would check those flags to determine which characters or items were available in each room.
So, your states may be implemented as a class or struct, each with properties for:
Asset list - list of pointers to background graphics and anything else that you need to display the room/state/level.
Entry conditions - achievements that must already have been reached to enter a level
Exits - links to each possible "next" exit. North,South,East and West are some examples of this, but you may also include Door1, Teleport, etc. When attempting to exit a room, or determining of an exit/door is "open", your game could check the next state to see if its entry conditions have been met, and alter the way the exit is displayed on the screen, or just not allow the player to move in that direction.
If you want to get fancy, you could include a different version of a state with different entry conditions, which would alter the way that the room is presented to the player, or the actions that are available in that room.
Your start screen, death/game over screen, etc could all be states within the system, similar to the way in which you might navigate between menu screens. In fact, if you have such a menu system in place, you could use it for this. Instead of up/down arrows and "enter" to navigate a menu, you would look for specific events within the game play area, such as stepping on a teleport pad, walking off of the right side of the screen, etc.
From an admin point of view, consider whether or not you could benefit from creating an admin tool that would allow you to create the state machine. Add rooms to a map, create links between them, assign assets like background images, etc. This is probably overkill for your first attempt; it's too easy to get absorbed in building admin tools, and never actually finish the game. Remember - you're not writing middleware, but a game.
Hope this helps.