region used to limit server side processing to just its inner subtree.
ajaxSingle - just particular case - fully the same to wrapping just one link into region.
process atrribute usefull when you can't define subttre to be processed with one region. for example you have three inputs and need to process third one together with the first. So wrapping to one region impossible because of second one. So you should made support on the third input ajaxSingle and add define process = "firstinputId" on it.
Also region affects work of a4j:status component.