"I was never that sure what a 4GL language/system was"
I can only speak from experience with Informix 4GL. Essentially a structured procedural language (but why retain "LET" as a keyword for assignment statements) but also incorporated SQL, form handling and report handling. The form and report handling incorporated event handling ("ON" as a keyword).
Essentially it added higher-level abstractions (databases, menus and reports) to what previous languages had had just as 3rd generation languages did in comparison to assembler and as assembler did in comparison to machine code.
I never quite escaped the feeling that the original non-procedural Informix applications, Perform and Ace (a report writer) were more truly what was toted about as 4GLs at the time but, within its restrictions, it was more practical - serious work with Perform & Ace required linking C code into their interpreters.
The OO approach to incorporating SQL has been very different, as far as I've experienced it. There would be some object which had a string component into which one would build the SQL with string operations rather than directly writing it in the source as a statement in its own right. This seemed clumsy. It was no surprise that New Era, Informix's own attempt at introducing OO into 4GL which did just this was a failure. However, as time went on it became more practical to take Informix 4GL's approach of preparing a named statement from a string and then executing it as more practical than the original for many purposes and still less OTT than the OO approach.
What we seem to have ended up with, for the most part, is 3rd generation procedural languages with OO features added. They don't really represent a higher level of abstraction and this, I think, is a failure.