Почему функция вызывается без скобок?
"return counter;" это не вызов функции, это возращается отбьект/функция "function counter".
А вот далее "counter()" это и есть вызов этой функции "function counter()"
Так alert( counter() ); и выводит результат выполнения функции.