Единственно понимаю, что они нужны когда ты пишешь какой то класс, с которым могут работать внешние клиенты. тогда да. Надо чтобы они могли только вызывать задокументированные методы. Чтобы не могли что-то изменить по своему усмотрению.
А вот когда проект внутренний. Когда есть в них необходимость?
Можно простой пример, который будет понятен?