Die Systeme unterscheiden sich nunmal schon in ihrem Aufbau und ihrer Philosophie. Zaubern kann kein Compiler. Inwiefern ein Programm plattformunabhängig ist, hängt fast allein vom Programmierer ab.
Ja, man kann mit Mono Anwendungen für Windows, GNU(/Linux) und UNIX (Mac/BSD/...) schreiben, aber das hängt von dir ab.
Beispiel:
Angenommen du benutzt für Pfade immer Backslashes, dann ist es per se nur für Windows geeignet, wenn nicht irgendein Feature in der Bibliothek das wieder ausbügelt, denn unixoide Systeme haben eine andere Pfadsyntax.
Das ganze braucht Übung, bis man das abstrakter bekommt. Mittlerweile läuft eigentlich alles, was ich schreibe meist ohne Änderung gleichzeitig auf Windows und GNU/Linux. Das verdanke ich natürlich überwiegend FreePascal's
RTL,
FCL und LCL, die dafür schon einiges an Helfermethoden vorsehen.
Und mit dem von dir erwähnten C geht das genauso gut. Aber dann musst du halt auch selber etwas drauf achten, und nicht einfach für eine Plattform losproggen und erwarten, dass es auf den andern auf einmal auch läuft.