It is not easy to give a general answer to this question as it refers to the architecture of an MVVM application and there are many aspects to consider. It probably helps to sort the decisions to make and provide a couple of best practices. An answer to this will always be opinionated as it involves matters of style and taste...
A real life, complex MVVM application cannot be built without a fair bit of infrastructure which is often ignored by the tutorials. Especially for the construction of views, ViewModels and models as well as for glueing everything together there are many concepts available.
I will just give you an idea of how I have dealt with the problems you mention:
I never bind to models directly. ViewModels tend to become more complex as the application grows and the ViewModels which don't contain any additional logical aspects (compared to the model) are really, really few. Change notification (INotifyPropertyChanged) is another aspect: It makes sense to isolate this aspect to the ViewModel, as long as the change notification is required for UI purposes only. I recommend spending the extra effort for the sake of maintainability and scalability. You don't want to be forced into a major redsign just because you forgot something at the beginning.
Implement infrastructure to deal with common MVVM tasks, like synchronizing a collection on a ViewModel with a collection on a view. See the answer here for details. I ended up building a ViewModelFactory which deals with construction and caching of ViewModels. This even allows recycling of ViewModels (take a ViewModel instance that is not needed any more and just switch the model, similar concept to UI virtualization in recycling mode).
Of course, this is not a full answer to your question but I hope it helps you to go further. If you've got more specific questions, feel free to get back to me.