Ничем, это все middleware. Суть промежуточного обработчика заключается в том, что он должен вызываться в самом конце и либо завершать процесс, либо передавать объекты req/res в следующее промежуточное состояние.
Вот здесь можно посмотреть реализацию внутри express, а здесь почитать как все это дело работает
Если выводить в консоль user, то в блоке if выводится, вне его нет.
вне его и не будет, потому что область видимости переменной ограничена блоком if. Также в блоке if вы делаете return и сразу же выходите из функции, какой результат вы ожидаете?