Зачем при вызове функции ставят две двойные скобки?
Функция getFunc() возвращает другую функцию (та что в переменной func). Вот вторые скобки нужны затем, чтобы вызвать функцию, которую вернула getFunc().
Можно сделать так:var func = getFunc();
func(); // тут уже сработает alert(), который она вызывает
Что б вернуть не функцию, а результат который она возвращает.
Второй скобкой Вы как бы вызываете внутреннюю функцию которая берет выводит переменную a из замыкания. 
Если скобки опустить, то return внешней функции вернет Вам не результат а саму функцию.