I have done something like this before. I used the following set-up:
I used the deeplink module to provide a link into the wizard form in which the user can provide his/her information (using a non-persistent object. If you want to track the applications, you can user a persistable object). After the user has entered all information you can provide a microflow button in order to:
This is possible by creating a form which is accessible by anonymous users. You could use a non-persistant object to let the user enter his personal information in this form. After some validation in a microflow you could create an user by creating an administration.account object and send a mail to the user.
I assume you would allow anonymous users on some sort of landing page. There you could create a button to create a new user, do password retrieval based on mail adress or where the user can enter his credentials to log into the system.
Then after the create account button use a microflow to create the user, show the form with the user details and in the end after creating the account mail the user his account details with a password created by the system. Use a boolean to check if it is the first time that a user logs in. Then after a fist login from the user redirect the user to make him adjust his password.