Comprender a los setters privados

No entiendo la necesidad de tener setters privados que comenzaron con C # 2.

Tener un método setter para mí es permitir que el usuario establezca algunas variables en esa clase. Al hacerlo, no expondremos las variables directamente a los usuarios. En cambio, les permitimos hacerlo a través de este método de establecimiento público.

Esto para mí está usando "encapsulación". Existen algunos argumentos que afirman que los setters privados le permitirán aplicar la encapsulación.

¿No estoy usando encapsulación usando métodos de establecimiento público? ¿Por qué necesitamos setters privados?

¿Cuál es la diferencia entre una clase inmutable y una clase con setters privados?