Зачем нужны callback функции?
Тем, что ты можешь много разных getInput использовать и при этом использовать разные функции для обработки, указанные вторым аргументом. А, используя первый вариант, одна функция logstuff привязана функции к getInput, и если что-то понадобится изменить, то функцию getInput придётся адаптировать под изменившиеся условия.
В данном случае - разницы никакой.
Если нужно будет устанавливать разные обработчики для данных - появится преимущество.
То есть если будут вызовы:getInput({ name: 'Rich', speciality: 'JavaScript' }, logStuff);
getInput({ name: 'Rich', speciality: 'JavaScript' }, logOther);
getInput({ name: 'Rich', speciality: 'JavaScript' }, logToDisk);
Имхо в данном случае это не совсем callback, это просто передача функции обработки как аргумента.
Callback, это когда вы вызываете какой-то метод, который когда-нибудь (через несколько секунд например) должен вызывать вашу функцию с результатом.