Is setup and loop provided for convenience?
Those pieces of code are pretty much the same.

If you look at the Arduino source code you'll see:

setup();

for (;;) {
  loop();
  if (serialEventRun) serialEventRun();
}


(I'm not sure what serialEventRun() does.)

I don't think you can 'overload' the main function declaration. Also note that the main function calls init, which e.g. configures the timers, so millis() etc. will work.