I played around with some of the APM agents, namely Java, Python, and RUM and had a look at the docs of the others.
The relatively easiest to integrate is the Java one, besides one has to know which packages are used. So far, so fine, but there is room for improvement with regards to autodetection.
RUM is okay to integrate, if you have an html file you can change, where you put the script thingy. But to integrate it in an Java application, which you don't know, is hard. Python works slightly better in this regards. I imaging, it is nearly the same for all the other platforms.
Instrumenting Python is hard, which is caused by the often unclear and ever changing documentation, at least this is my impression.
I can compare to some APM competitors and they have autodetection and much easier instrumentation of methods in their Java agents. Also, they have the RUM agent integrated in their Java agents, which makes it's use so much more accessible.
The integration of the python agent work somehow, auto instrumentation should be extended by far. But even elastic's competitors rely on, at least some, manual instrumentation.
The integration of the other agents is much worse compared to competitors.
All in all, why is the integration of elastic's agents so cumbersome and hard, the competitors show that another world is possible.