allow user to sign up for different role
Organic groups can do it however it requires a legthy process form the user. Eg. a manager must create a group (the creator of the group is also the manager of it by default). Then users that wish to join the group must go to the page of the group and request to subscribe. The good thing with og is that it also supports the concept of og content. That is you may create a content type and denote it as og content of a specific group. Then only the members of this group will have permissions to a node of this content type.

Another option is to use a plain old field in the user registration form that will be a list with the desired role. You can do this by going to the user configuration page. Then you can add a rule to automatically grant the requested role to every new user (a simple value comparison in rules) or create a manager view so the manager can see which user wants a role and grant it. The vbo module can help the manager in the later case.