The advantage is it makes development of the OS easier and application debugging easier. It is also makes future proofing the OS more robust. A program that can rewrite or inspect other programs is very powerful, in the same way lisp macros are.
One concrete advantage of this is you could write a debugger as a user application, it wouldn't have to be integrated in to the language runtime.
And is a security nightmare. If I have an executeable, I have verified, I don't want the instructions to be altered in any way. In fact I prefer if it is impossible from a hardware level by marking them as executeable bits.
Also, 3L runs in two modes: development or secure. In secure mode you can completely disable manipulation of source code (or strip it out) and mark all code as read only and have the system verify the code hasn't been modified when it is run.
You still need a debugging build, otherwise compiler optimizations will obscure the executeable to the point where debuggers cannot reliably debug it.