Просветите на тему ООП (особенности применения модификаторов доступа)

У меня вызывает небольшое недоумение, конечно, из-за моего недостатка знаний в области программирования один момент.

Вот есть, например, какой нибудь класс, в этом классе есть какие то переменные значимого типа. По ООП все переменные должны быть закрыты, т.е. иметь свойство private и очень часто употребляется фраза, прим. "Нужно использовать private, что бы скрыть эти переменные от пользователя" Так вот эта фраза и вызывает небольшое недоумение, т.к. я не понимаю, как пользователь может манипулировать открытыми переменными, если проект уже откомпилирован ? Если переменные кода должны быть закрыты от классов создаваемых другими программистами в больших проэктах, то разве не правильней говорить что нужно закрыть переменную от разработчика, а не от конечного пользователя который будет использовать готовый продукт?