Геттеры и сеттеры позволяют навешивать логику на чтение и запись свойств.
Например фреймворк Vue реализует через них реактивность. В геттере он сохраняет для свойства информацию, кто его читал, можно сказать, что свойство так "понимает", кто от него зависит. А в сеттере свойство уведомляет всех, что оно поменялось, а значит нужно пересчитать и то, что от него зависит.
Еще один пример использования - ленивые вычисления. Например, мы можем создать middleware для express, который парсит куки и добавляет свойство cookies в объект запроса. Вот только куки нужны не каждый запрос, а их парсинг отнимает время. Через геттер можем сделать, чтоб парсинг происходил только при первом обращении к свойству cookies, тем самым улучшив производительность.