Shouldn't the C runtime do that before calling main?
It does; the stack pointer starts out aligned, but then the function does a call, and the call instruction adjusts the stack pointer by 8 bytes to push the return address, which would cause it to be misaligned. The push pushes an extra 8 bytes so that the stack pointer is aligned in the callee.
Any reason not to just do some other “increment stack pointer” option?
The instruction is smaller. Push rax is encoded into 1 bytes, while an increment stack pointer would be 4.