Because another library function (e.g. the __libc_start_main() function or the mainCRTStartup() function) needs to call the main() function, which you should define.
If you don't want to get into the details then here is the elevator pitch:
It's like pointers except that the dereferencing (the * operation) is done automatically.