Je nachdem, was du meinst, kann jede Sprache das.
Zum Beispiel kann C++ das. Auf den ersten Blick ist dies absurd - C++ ist eine statisch typisierte kompilierte Sprache. Also - was du tust, ist die LLVM-Bibliothek in dein Projekt einzubeziehen. Dies ist ein Compiler-Backend, und du kannst dies verwenden, um deine Klassen zu beschreiben, sie zu kompilieren und sie mit dem LLVM JIT auszuführen, alles zur Laufzeit für deine Anwendung.
Soweit ich mich erinnere, ist das gcc-Backend in C geschrieben, also könntest du, wenn du bereit bist, diesen Code herauszufinden, im Prinzip Klassen zur Laufzeit mit einer Sprache definieren, die nicht einmal Klassen hat.
Wie auch immer, ein Teil deiner Aufgabe ist es zu definieren, was genau eine Klasse ist - das ist nicht in die Compiler-Backends eingebaut, da sie eine Reihe unterschiedlicher Frontendsprachen mit unterschiedlichen Typsystemen unterstützen sollen.
Natürlich empfehle ich diesen Ansatz nicht - ich weise nur darauf hin, dass es möglich ist.