Don't create actual controls dynamically. Put everything you need in properties of the view-model and bind the UI to those properties. You will also need the control's DataContext to be set to the view-model, of course. See this overview for details.
To answer more to the point, bind the content of the ContentControl to a property in the ViewModel. That property can be of any type! Then in XAML declare a DataTemplate to be used for displaying that property; that will represent the 'skin' used to dress up that property after it's bound. Set the DataTemplate as the ContentTemplate of the ContentControl (or as the default for that type... etc.). The DataTemplate can contain other controls, other bindings, anything. That's at least one way of doing it, there are many. You'll have to ask something more specific or start reading on the basics.