Wow, that Python Tutor page is awesome. Definitely bookmarked that.
As far as the original question, basically a recursive program is one that continues to call itself repeatedly to accomplish a task. That is what that line of code is doing. Lets look closer at that.
rangeOfNumbers(startNum, endNum) wants to create an array with all the numbers from
endNum. For our example lets use
rangeOfNumbers(2,8). This could be done with a for loop:
for (let x=startNum; x < endNum+1; x++)
but here we want to use recursion.
With recursion, you typically want the function to perform one step in the task, and then call itself to complete the rest of the tasks. In this instance, the line of code in question does that by calling itself, but with
endNum - 1 instead:
So that would make an array from 2 to 7,
numbers = [2,3,4,5,6,7], so the only thing left to do is push the last number,
rangeOfNumbers(2,7) does the same thing, by recalling itself with
endNum - 1,
rangeOfNumbers(2,6)… which creates
[2,3,4,5,6] and then pushes 7.
This repeates itself until the end condition is met, in this case when
startNum === endNum. At that point it finally returns an array with just
[startNum]. At that point, all the functions that were repeatedly called keep returning which builds the array of numbers.
Recursion is really tricky to explain. This process written out might look like this(each line being the recursive call):
rangeOfNumbers (2,8) =
8 + rangeOfNumbers (2,7) returns [8,7,6,5,4,3,2]
7 + rangeOfNumbers (2,6) returns [7,6,5,4,3,2]
6 + rangeOfNumbers (2,5) returns [6,5,4,3,2]
5 + rangeOfNumbers (2,4) returns [5,4,3,2]
4 + rangeOfNumbers (2,3) returns [4,3,2]
3 + rangeOfNumbers (2,2) returns [3,2]
2 returns 
Hopefully that makes sense. I’d say go through that previous Python Tutor code walkthrough again and see if it makes more sense now.