Because if you use main() things like interrupts are not setup() for you. If you use loop() and setup() init() and initVariant() is called before setup()
From main.cpp
int main(void)
{
init();
initVariant();
#if defined(USBCON)
USBDevice.attach();
#endif
setup();
for (;;) {
loop();
if (serialEventRun) serialEventRun();
}
return 0;
}