You can view GObject (and in extension GLib and the ecosystem of GLib based libraries) as a common language runtime for several languages:
- Vala / Genie
- Gjs (then GNOME version of ECMAScript / JavaScript)
- C
- C++
- Python (through PyGObject)
- Probably others, really any language that can talk to the C API
Actually it really is an extension to the C runtime (which is the core common language runtime of most Operating Systems) that adds OOP support.
There are other such technologies like the Java JVM the .NET CLR and as you describe Apple is using the Objective C runtime now for multiple languages as well.
There is (in principle) nothing that prevents someone to write a Rust or Swift compiler that does something similar to Vala (emits C code and uses GObject as it's object system).
About your concern:
Vala could as well emit object code directly (without the intermediate "compile to C" step).
There are some advantages to the concept the valac is written at the moment though:
- You can take the emitted C files and use them in a C program without the need to have valac installed
- It's much easier for Vala to consume C files and
- The foreign function interface (called VAPI in Vala) was designed to make it easy to consume C libraries and abstract from common C idioms (like zero terminated strings, passing array with a length parameter, etc.)
- The generated C code can be optimized by the C compiler
- Standard C tools can be used to inspect the generated C code
- You can actually read the C code to see what Vala does internally (big plus for people that already know C)
Vala uses C as a higher level "assembly" language.