I love the libraries and community support, which is why I support the Arduinos; but I hate the hidden behind the scenes stuff like this.
You don't have to use it if you don't like it. Take the libraries you want and the gcc compiler and other tools and build your own environment. This stuff is hidden so people who don't know how to do that can still make their leds blink.
Not just like any other. This is my first time in 20+ years of programming that I have not declared main(). In all of my past IDEs for C/C++, [u]I[/u] declare main(). You don't in the Arduino IDE, and perhaps others, but I don't know of or use them.
It is COMPILED just like in any other C++ environment, which is what you asked. It is not WRITTEN just like any other which is not what you asked.
Yes, in any other environment you would have one header that has your main function in it. That's exactly what they've done here. They have a header with main in it. In any other environment your main would call other functions that you write. That's the same here, main calls setup and loop and init etc. The only difference is that you don't have to write it all the time. But even that is the case sometimes. I often have related C++ projects that are all using the same main function and differ only in what the functions it calls do.