EE has member group based permissions and is extremely flexible in that regard- you can limit bits of data w/in a template based on member group or limit access to the template itself based on member group. That bit would be easy.
EE does have a Simple Commerce Module that provides simple paypal integration. It allows an existing member to purchase ‘whatever’ and upon purchase be automatically upgraded to a different member group. Depending on your needs, this might work. However- it doesn’t really work for continuing subscriptions- i.e., expires after a month/year, sending an update reminder, etc. And it is limited to paypal. When folks need a more complex subscription setup, the most common approach I’ve seen is to use the third party aMember software. In any case- if what you need is beyond the Simple commerce module? It will need some custom work in some for or another.
There isn’t a native referral module, though I believe I’ve seen a few requests for this type of behavior. It’s not impossible there’s a third party module floating around that I haven’t noticed. However- out of the box? It isn’t available.
Forum access based on member group is no problem.
Oh- and as to the username. I have used emails as username before- but by default, it’s going to require a username, password and email address field- each w/content. So to actually avoid an error when omitting a username and have the email duped for that instead? It will take some mostly minor custom work. (Do it via an extension.)