It's all done with masks, every are that you can walk behind is a sprite, with a manual Z-Depth, so imagine a chair in front of a table.
[ ]
h
Now, if the player walks in front of the chair, no sprites are needed, if he walks between the chair and table, the chair sprite is needed, if he walks behind the table, the table and chair sprites are needed.
Now, to organise this, the click points, the collision zones etc is not nearly as difficult as you'd think. Once you have your rendered backdrop and cut out the sprites, make a new bitmap based on your backdrop, and on a seperate layer - draw the areas that your player can walk on, this is your main mask. Now, where the player would be behind each obstacle, draw the obstacle with a different colour onto the mask, but concentrating on the ground all the time. Basically, you'd have this mask bitmap loaded as an array, or even as a seperate bitmap, you could then check the position of the player with the mask, and decide if he can walk to a location, and what to do it he hit's certain colours on the mask. I mean, using this system puts a huge emphasis on the mask bitmaps, once you get movement and sprite handling, click zones etc coded - there really isn't much left to do with your engine, a huge chunk of the work is taking care of by the mask bitmaps!. Plus creating other point and click adventures (or an adventure creation system) would be easy. You'd simply have a little editor that let you specify what each colour does, like a list of colours and a little text handle for each is all you need - a function could simply return the text handle of a specified mouse click position.
Upload (or email me) an example backdrop and I'll show you

. I have thought about ways to do this (and most other genres) quite a lot.
Van-B
My cats breath smells of cat food.