Personally, I'd consider using a tool like
DotNetNuke, which already has all of this built in. This way, you can give them as little or as much control as you want and all you have to worry about is getting it setup. I admit that DNN can sometimes be a pain to get up and running the first time, but this is usually just because of not doing things correctly. Once you get experience with the product, it's almost second nature. While DNN doesn't have everything and there's probably a lot that could be done better, I try to look at it as a great starting point. If you want something changed, you can do it yourself.