Per invertire intendo che in entrambi questi 2 casi funziona:
g++ -Wall -g -o prova myfunc.cpp main.cpp
g++ -Wall -g -o prova main.cpp myfunc.cpp
Non occorre compilare prima myfunc dato che main usa quest'ultimo?

Per il secondo quesito, il più importante non capisco questo:
Nel momento che nel main includo myfunction.h nel main vengono ncluse le dichiarazioni delle funzioni che sono contenute in questo file. Mal'implementazione è definita in myfunction.cpp. Come fa il main ad ottenere l'implementazioni contenute in quest'ultimo file?