Почему нельзя скомпилированную программу запустить на другой ОС?
Потому что программа на С++ выполняется непосредственно в операционной системе, а программа на java выполняется в java машине.
Если крайне образно:
Из Java делают байт-код которому неважно где исполняться и он запускается внутри специальной JVM
Из C++ делают бинарник который привязывается (линкуется) к внешним либам и системному окружению и запускается непосредственно в системе