Смысл не в том, чтобы прогер не мог выстрелить себе в ногу -- если захочет, то выстрелит, а в том, чтобы в нормальных условиях можно было проверить в ту ли ногу он стреляет, заменить при необходимости картечь на пулю на лету или вообще тихо аннулировать выстрел. А это бывает нужно, особенно если учесть, что поля объекта совсем не обязаны быть переменными-примитивами, спокойно лежащими в куче. Или могут ВНЕЗАПНО перестать ими быть по мере развития продукта.
У меня иногда тоже бывает что когда пишу "правильно", разделяя уровни абстракции и всячески инкапсулируя, приходит в голову мысль: "А нафига? Можно же сделать проще." А потом через неделю-месяц-год приходится что-то переделывать и выясняется, что благодаря тому, что все сделано "по науке", можно поменять источник данных, скажем, с таблицы Эксель на локальном диске на Мускул, хостящийся за пол-мира от меня, за полчаса без малейшего напряга и изменения логики остальной части программы. И понимаешь, что ты, оказывается, не полный идиот :).