I should have elaborated on my comment a bit. I never said it would be syntactically beautiful: just that you could do it.
For example, back in the Amiga days I implemented a Object-Orientated GUI in
AMOS Basic. That was a procedural language. It ended up having lots of stub functions to handle the object part of the implementation and as the language didn't allow variable numbers of arguments to procedures sometimes you had to call the stubs with null values for parameters that weren't needed. Internally, I had no access to direct memory allocation so I had some general purpose arrays. Like GUI(30,10) which was a maximum of 30 objects with a maximum of 10 attributes. In parallel to that array I would use a string array: GUI$(30) for the same number of objects for things like text fields. Then accessing - through the stub functions - objects were given the first number - the index or "object" - and a specified attribute index and the stub functions were basically methods on the object. The Basic interpreter didn't enforce any of the object-orientation: that was all up to me with programming-style and if you didn't follow the style you broke it.
Now that example was not elegant at all but I successfully added functionality that was outside the scope of the language. Ugly as sin though.