compreensão de setters privados

Eu não entendo a necessidade de ter setters privados que começaram com C # 2.

Ter um método setter para mim é permitir que o usuário defina algumas variáveis nessa classe. Ao fazer isso, não exporemos as variáveis diretamente aos usuários. Em vez disso, deixamos que eles fizessem isso através desse método público de configuração.

Isso para mim está usando "encapsulamento". Existem alguns argumentos por aí que afirmam que os setters privados permitem aplicar o encapsulamento.

Não estou usando encapsulamento usando métodos de setter público? Por que precisamos de setters privados?

Qual é a diferença entre classe imutável e uma classe com setters privados?