Почему при запуске функции-замыкания, переменная внутри не затирается?
Ф-ция makeCounter вызывается ОДИН раз. Соответственно  ЕДИНОЖДЫ объявляется и инициализируется единицей переменная  count .  Данная переменная является частью области видимости созданной  при вызове makeCounter.  Данная функция возвращает другую функцию (назовем ее f для удобства)return function() { 
    return count++;
  };
которая так же имеет доступ к этой области видимости в которой была определена переменная count.  Вот и все. Далее вы вызываете эту функцию (f)  много раз и каждый раз она   работает все с той же переменной count.
Попробуйте сделать вот так :var counter = makeCounter(); //   присвоили функцию у которой своя  СОБСТВЕННАЯ область видимости 
var counter2 = makeCounter(); //   присвоили функцию у которой своя  СОБСТВЕННАЯ отличная от предыдущей область видимости
появится две области видимости и у каждой будет свой отдельный count.
попробуйте повызывать  console.log( counter());
console.log( counter2());
Потому что вы сохранили его в переменную "counter", если его сбросить, счётчик тоже сбросится. 
А вызывая его как метод просто вызываете грубо говоря функцию внутри него.