Żeby łatwiej było stwierdzić, co zmienia wartość takiej zmiennej gdyby coś szło nie po twojej myśli i szukałbyś przyczyny. Popełniamy błędy i w każdym języku jest masa mechanizmów na ułatwienie pisania bezpieczniejszego/łatwiej utrzymywalnego kodu, a które w żaden sposób nie przekładają na wynikowy kod maszynowy. Nawet jeśli masz taki private member i jednocześnie public setter dla niego, o wciąż dużo to ułatwia, bo debugując możesz sobie w takim setterze coś printować albo ustawić breakpointa.
Drugą sprawą jest dlaczego tworzymy takie kody (...)
Jeśli member jest już private w związku z powyższym, a ma być do jego wartości jakiś dostęp z zewnątrz, to... no nie masz wyboru. Poza tym - bez sensu.