One of the challenges for a runtime environment is providing reusable high-level abstractions. Most procedural languages on modern operating systems, for example, use the same stack frame layout so you can call functions written in one language from another. This was not always the case. Traditionally, Pascal and C passed parameters in the opposite order to each other, so you needed special support for calling C functions from Pascal, and vice versa.
On systems such as .NET and the JVM, all languages have to either use the same object model or implement their own on top. Unfortunately, as the author of RedLine Smalltalk discovered, these object models are not always flexible enough to represent everything that you need.
At the opposite end of the spectrum is something like the Common Lisp Object System, which is so complex that getting good performance out of it is difficult.