Well, going "under" objects using sprites is simply a matter of drawing order, in that your upper most object is drawn last to the screen. While this is not impossible in a map situation it would mean you have two different map routines, as in the psuedo code of;
mapground() -- draw things beneath the player
drawplayer() -- draw the player
mapabove() -- draw things above the player (as sprites)
This would mean that mapground() doesn't draw the bridges, etc. that the character goes under, while mapabove() draws only them as sprite that will cover the player.
s.
Any truly great code should be indisguishable from magic.