Какой из вариантов правильнее для функционального программирования JS?
Чтобы увидеть преимущества функционального подхода, лучше написать пример немного другим образом. Сейчас у Вас в общем ничего функционального там и нет (наличие функций !== ФП):function formatter(item) {
    return "0" + item.toString();
}

function validator(number) {
    if (typeof number !== "number") {
        throw new Error("invalid argument: Number expected");
    }
    return number;
}

function formatData(array, formatter, validator) {
    return array.map(item => formatter(validator(item)));
}

alert(formatData([1, 2, 3], formatter, validator));
PS: можно заморочиться и спроектировать более универсальные функции, но в качестве примера и так сойдет)
Второй вариант. Он называется интересным словом Каррирование. И выглядит красиво и кода меньше.