As your own example shows it is not really that difficult to either use those libraries directly or abstract them into plugins.
Almost no software is developed without usage of libraries, it is just no feasible.
Abstractions, like that application's plugin system or Okular's renderers or KDE's KParts system, have usually two consequences:
- they make the underlying functionality easier to use
- they hide some aspects or advanced functionality
Which is why they are most often added on a high level, e.g. as an application specific plugin API, because the then closely known use cases make it easier to find the right balance between the two.
Creating an abstraction on a lower level is usually a lot more work and only viable if there are both many prospective users and enough similarity between the different parts below. Good example for that are media frameworks like GStreamer: lots of potential users, very similar properties of codecs.
There is probably just not enough need for a low level document rendering abstraction, i.e. the "market" for universal document viewers is not that big.
Hence those that exist putting their abstraction into places that fits their respective requirements the best.