1 and 3 can be done most easily using the Panoramio layers. The only problem is they cover the whole map they are attached to. The way they are connected is not made public so cannot be changed.
2 to limit to a region) what do you mean? a square region, a circle?
I think the easiest thing to do would be have a map with a display of photos underneath it. Then, when the user moves the map, update the photo widget with a new region (a rectangle). Then get the photos displayed in the widget and put their positions on the map, updating when the user scrolls the photos.
(This uses a PhotoRequest object, settable with user id, tags and region, but due to poor documentation you can't use it directly only with a photo widget).