It depends a lot on your requirements.
A simple solution would be to have several base-templates with placeholders that get filled with content/other templates later.
I.e. a template might look like this:
foo
{page_header}
{page_content}
Then you provide the users with a simple way to define page headers and page_contents, i.e. the first might just be a textbox, the content is filled by using something like TinyMCE.
If necessary, the clients can use other placeholders in the content, but that might not be neccessary.
After that you just add an auto-generated menu, create the logic that replaces the placeholders with the user-entered content (something along the lines of template.Content = template.Content.Replace("{page_content}", customer.Pages['foo'].GetTemplateContent("page_content"));
)and maybe add a CSS stylesheet with color and font settings provided by the customers.
The most complex part is the backend and user-authentification.
This solution is simple to implement and has no real flexibility at all but it allows customers to quickly write a few texts and add some fancy images without having to care about anything else.
To persist color settings, write them into the database and create a new CSS stylesheet everytime they are changed. For other content just use a Database table "content" with the columns "key" and "value" and you might want to generate static HTML pages on every change.