Moderating individual users is a good idea. However, right now I'm focusing on changes needed to support UBB.classic's feature set, so I'll defer that one.
I gave some thought to how to implement this with #4 (permission groups). For example, I could add a group "No private messages", and add users to that group to disable their private-message privileges. The private-message code would check for membership in that group. Similarly, I could add groups "No login" and "No profile editing". This appproach seems kind of ugly.
I'm leaning toward using (2) or (3). (3) would probably be less likely to cause conflicts with future versions.