Everything you can share. Our user management need to let a user register himself in a staging status. Then another non-administrator user could pick the user (ideally in a selectable group) and invite him to his space.
Assuming this is for the old JSF client and not using Share. The Alfresco SDK has an example for a sample login page. Details at http://wiki.alfresco.com/wiki/Customising_The_Login_Page. Start there and add the additional fields you require (remembering to update the user content model or add a custom aspect for custom fields). Then in your backing bean method, create the user, create their authentication token, add them to the staging group, and log them in.