Функцию в JavaScript можно «положить в переменную», передать как аргумент при вызове другой функции или получить как результат вызова ещё одной функции. Так же как 
"строку" или число 
42.
В этом выражении, смотрите, есть не 1, а целых 2 стрелочки: 
(param) => () => {
  console.log("Выхлоп!" + param);
}
Две стрелочки, значит, тут две функции. Одна вокруг второй. Первая, та, что снаружи, принимает аргументом 
param, и возвращает вторую функцию 
() => { console.log("Выхлоп!" + param); } Причём вернувшаяся функция «запомнила» значение 
param внешней обёртки и будет его использовать. Это обёртывание называется «
Замыкание» или "closure".
Теперь скобки при вызове. У нас матрёшка из двух функций: 
function(){ return function() {}; }
Чтобы вызвать внешнюю, нужны 
первые скобки:  
((param) => () => console.log(param))(6) – этот вызов внешней с аргументом 
6 даст результатом внутреннюю функцию, которая запомнила значение 
param. И мы имеем на руках внутреннюю функцию.
Чтобы вызвать внутреннюю, нужны 
вторые скобки: 
((param) => () => console.log(param))(6)()
Итого, две функции — два вызова — две пары скобок.
В 
setInterval() первым аргументом надо передать не конечный результат, а функцию — её вызовут через некоторое время, не сразу. Тут передают внутреннюю функцию. Поэтому скобки всего одни: с одними скобками получаем внутреннюю функцию.