ogurchik,
 потому что catCounter возвращает функцию, которая генерирует число а не число. 
var catCounter = function () {
    var counter = 0;
    return function () {
        return counter++;
    }
};
alert(catCounter()());
В первом варианте вы получили функцию и пытаетесь её показать алертом. 
Во втором вы получили функцию, потом у неё получили число, которое показываете алертом.