@Dalslandan: Svarar min egen fråga.
Hade svårt att hitta information först, men hittade ett bra svar här:
StackOverflow: Why does using the wrong calling convention sometimes work?
I mitt exempel tror callee att caller rensar stacken, och caller tror att callee rensar stacken. (Ingen rensar stacken)
Men som sagt, skrämmande är om man inte är i debug och använder argument kan funktionen verka som den fungerar. Vilket resulterar i att man får ett undefined behavior (äter stack space). Eller som I exemplet ovan, där jag använder fel CCs, men det fungerar eftersom jag inte använder några argument in. (Därav, det finns inget som behövs plockas av stacken.)
Sammanfattningsvis från StackOverflow:
It's all very much Undefined Behavior.
And one property of Undefined Behavior is that it can do anything, including apparently working…
Eftersom jag inte är bra på assembly ville jag dubbel kolla att just __cdecl och __stdcall inte hade något med return värdet att göra. Vilket med efterforskning det inte har att göra (skillnaden mellan __cdecl och __stdcall ändrar inte hur return värdet hanteras utan endast dess argument till funktionen).