ну, в фп языках, по идее, инкапсуляции как таковой(в смысле ООП) не может быть по определению. Если я все правильно понимаю, тут используется композиция и разработчик через интерфейс функции будет решать, как можно изменить поведение, а как нельзя.
ну, вы только что сказали, что каждый случай надо рассматривать отдельно. Это вопрос проектирования - надо выдерживать баланс, когда разделяешь код по методам или выносишь в утилитарные функции.