Why not (finally) expose main.cpp to the user ?

Why do that? In fact why not change main.cpp from:

#include <WProgram.h>

int main(void)
{
	init();

	setup();
    
	for (;;)
		loop();
        
	return 0;
}

to:

void init ();
void setup ();
void loop ();

int main(void)
{
  init();
  setup();
  while (true)
    loop();
  return 0;
}

Then it compiles on its own without any header files, and will only be used if the user doesn't supply their own main function.