Кто может обьяснить рекурсию?
Вы не учитываете результаты прошлых вызовов функции. При каждом вызове создается новый экземпляр массива и отбрасывается, после чего вызов делается снова. Кроме того, вы пушите элементы в неправильном порядке.
Более правильный вариант:function rangeOfNumbers(startNum, endNum) {
   let numArr = [];
    if (startNum === endNum ) {
    numArr.push(endNum)
    return numArr;
  }  else  {
       numArr.push(startNum)
   return [...numArr, ...rangeOfNumbers(startNum + 1, endNum)]
  }
};

console.log(rangeOfNumbers(6,9))
let numArr = [];

function rangeOfNumbers(startNum, endNum) { 
  
  if (startNum === endNum ) {
    numArr.push(endNum)
    return numArr;
  }  else  {
   
    numArr.push(endNum)
   return rangeOfNumbers(startNum, endNum-1)


  }

};
Так?
p.s. Вы каждый заход функции перезаписываете результирующий массив в пустой, смысл рекурсии - использовать туже функцию, сохраняя результат вне