I am using the dynamic stuff since it came around with Progress V9 - which is, I think, for some 14 years now. I have to admit that I really had an excellent mentor at that time who was really good a explaining things and that I had to find out some things the hard way. And, you are right, one size does not fit all - meaning, there is good reason for doing things the static way and there are good reasons for doing things the dynamic way.
But I feel urged to say that using static code does not mean that you do not need to thoroughly test. There are things that the compiler will complain about, but that does not mean that your code works as you meant it to. For me that is no argument to avoid dynamic stuff.
I don't want to fight religious battles, I just found out that there is no reason to avoid something, but that does not mean that you have to use it just for it's sake.
I would never use a dynamic query for batch processing a table that contains billions of rows. But I do use dynamic stuff for generic logic in many places of applications where it allows me to build re-usable, robust business logic components.
Having said that, I am not saying Java is better than the ABL - or vice versa. I am just saying that both are tools which have their strengths and weaknesses. Plus, both tools offer features which might be appropriate to get a job done but are not necessarily best practice for every job. Basically, I do love the ABL - but I do love Java too. In fact, I am really in a fortunate position to use both of theses technologies working together without a fuzz in a huge project - using each of the technologies for what they are good at. Plus, I do not use reflection just for it's sake - I use it when I need it to get the job done.