You can add a simple attribute to each tile that specifies its level.
So for example:
tileA.layer = 0 // Will be at the bottom
tileB.layer = 1 // Will be above level 0, on top of it.
// Add tiles to layered list
List<List<Tile>> tiles = new List<List<Tile>>();
tiles[0].add(tileA);
tiles[1].add(tileB);
// Draw 'em in the right order!
void Draw(List<List<Tile>> tiles) {
foreach( var listOfTiles in tiles ) {
foreach( var tile in listOfTiles ) {
tile.draw();
}
}
Now you can sort your tiles depending on their layer values and draw them bottom -> top!
This will make it look like you have a certain depth in your game. Most tile engines support this. Another cool thing you can add is transparency to your textures so you can see through to the bottom layer.
This can be done with water for example - imagine the water at lvl 1 and then the ocean floor at lvl 0. If the water texture is somewhat transparent, you will be able to see the ocean floor from above.