There's a lot of different ways to achieve this, depending on your game's needs.
To mark a level as completed, a simple way would be to create a series of global variables in your event sheet. These would be booleans, called "Level1Complete", "Level2Complete", etc. Because they're global variables, they'll retain their data from layout to layout.
You could also create a Dictionary object, with keys named that way, and set to either 0 or 1. If there's going to be more information about each level you want to store, consider an Array instead of a Dictionary.
However you choose to store these flags, you'll need to add a system condition called "On Start of Layout" in the event sheet for the level select. This only runs once, and it's useful setting things up before the user has control or sees anything.
Now you can add sub-events to your On Start of Layout condition. Using the simple global booleans, you can add events to each one to see if it's true, then unlock the level if so (such as "If Level1Complete is True, destroy LevelIcon"). If you use a Dictionary or Array, you can do the same (and more) in a more elegant way.
Hope that helps!