Because that is startup code required for normal operation. Before main() can be called, MCU needs to be prepared, memories initialized. That's what startup code does.
It is also present in your ASF project, it is just buried real deep, so you don't see it.
irq_handler_reset() is actually the first thing that gets called after reset, not main(). You don't really need to have main() at all.