I would agree an entire page is excessive, have you considered StaffPage has_many StaffMember. Where StaffMember is a DataObject, then the getCMSFields would need a tab with a hasmanycomplextablefield controling the relationship.
My silverstripe/php skills aren't the greatest. Are you talking about something like whats done in Tutorial 5 - Dataobject Relationship Management?
I did play around with this a few months back when trying to do something else but ended up dropping it as I couldn't get the ImageField to work in the pop up. If you think that uploading images should work I'll try it again and let you know when/if I run into problems.
Tutorial 5 - Dataobject Relationship Management seems to have a lot more than I'd need. Can you tell me which parts I should concentrate on.
Unfortunately, that's normal. Using the DataObjectManager Module will at least let you save the DataObject without closing the popup. Other than you'd need to overload the pop-up and create a new method that would cache the image and create all the data objects sequence since as you guessed you can't associate the image object with the staff dataobject until the staff object as been saved and received an ID
I've toyed with the idea using onAfterWrite and checking for an unset ImageID field to prevent it from running each time the dataobject is saved. Its messy but possible. I've done it with the bulkCSVUploader, but never with a front end form
You could use Uploadify, which will allow you to upload images before a DataObject is created for the first time. Uploadify holds the image information in temporary space/memory until the object is created, then it adds the file relationship.