Потому, что Math.max принимает не массив, а список аргументов. А apply первым аргументом принимает контекст this, а вторым массив, который будет передан аргументами в Math.max
т.е. вот такой вызов
Math.max.apply(null, [1,2,3])
будет преобразован в
Math.max(1,2,3)
Если например аналогичный метод call, он вторым аргументом уже не принимает массив, ему нужно передавать аргументы последовательно
Math.max.call(null, 1, 2, 3);
// будет
Math.max(1,2,3)