You appear to be confused between the need for runtime support for language features, and the difference between a native-compiled and VM-compiled (or interpreted) language.
Most high-level languages need some sort of run-time support. Even C has a run-time library, although on many platforms you can choose not to use some or all of it. Modern operating systems provide even more runtime support, and many languages provide OS-specific extensions that integrate these - consider dynamic loading of libraries...
Furthermore, there's nothing stopping you from building a message-passing system on top of a language that doesn't support it intrinsically. Since this is extremely common (especially for programs written for event-driven platforms), integrating it into the language can be looked at as simply factoring some error-prone busywork out of the high-level code and into the language and runtime.
Finally, both Java and most .NET languages are actually compiled - they just compile down to a bytecode that no machine implements natively, requiring the use of a Virtual Machine to actually execute them. The most performant VMs compile the code again prior to executing it - this can be such an effective technique that it has been used to build fast and efficient compiler tool-chains!
Visual Basic is a red herring here - some versions are interpreted, others are compiled, and VB.NET - like other .NET languages - is compiled to bytecode and then JIT-compiled again during execution (while superficially similar, this tends to be implemented very differently from the earlier VB VMs). If nothing else, this should tell you that a language and the means by which programs written in it are executed are not as tightly coupled as is commonly-believed...
In answer to your last question: Objective-C has never not been portable, at least in the sense that C is portable (that is to say, source-code portability). Apple uses the GCC compiler, which has been ported to a dizzying array of platforms... However, once you start taking advantage of platform-specific APIs (probably one of the best reasons for using Obj-C on Apple platforms to begin with...) you're limited to platforms that implement those APIs. Binary portability is possible in theory, but I know of no implementations.