Why
Because you may want to initialize your instances when marshalling/unmarshalling an object (across an appdomain, across a network etc) in a different way. In other words, you may have different business logic for creating a blank state instance and for creating a clone from a pre-existing state.
How
You can use reflection with Activator.CreateInstance
to initialize an object using a private/protected/etc constructor. One of its overloads takes a boolean specifying whether the constructor is non-public.