Почему без return function код не работает?
В данном случае вы получаете своего рода фабрику счётчиков. При каждом вызове makeCounter() возвращается ссылка на объект фунции, а не на её результат. Так же в данном примере используется замыкание, которое дает возвращаемой функции возможность обращаться к переменной currentCount, которая нахоится в родительской области видимости.function makeCounter() {

  var currentCount = 1;

  return function() {
    return currentCount++;
  };
}

var counter = makeCounter();
var counter1 = makeCounter();

console.log(counter()); //1
console.log(counter()); //2
// счётчики работают независимо друг от друга
console.log(counter1()) //1
Этот пример, конечно больше синтетический, зато охватывает несколько чрезвычайно важных концепций в JS, а именно: замыкания, области видимости, first-class function. First-class function, в свою очередь, означает ряд принципов, которым следуют абсолютно все функции, создаваемые в JS:Каждая функция является объектом или экзмепляром объектоного типа (instance of Object type)У функции могут быть свойства. К примеру запись makeCounter.foo = "bar", абсолютно валидна. Подобный подход используется для создания статических свойств функцииСсылку на объект функции можно сохранить в переменной, а потом вызвать эту функцию. Как в вашем примереcounter()Можно передавать функцию в качестве параметра в другую функциюФункцию можно возвращать из другой функции, как в вашем примере
Таким образом, хотя данная функция не несёт в себе сложной логики, но она иллюстрирует множество важнейших концепций, без знания которых будет очень тяжело понимать как работают многие бибилиотеки
Именно этот код лишен смысла, это безграмотно составленное учебное пособие либо код сгенерированный автоматически, на практике замыкания используются прежде всего тогда когда требуется реализовать не просто вызов функции, а событие, в частности для асинхронности, чтобы понять это и многое другое - практикуйтесь с реальным кодом, например разных API библиотек, а не страдайте х....