Plugins are omnipresent since it is possible to modify/replace the behavior of any public method in the system. Customizations should be done using plugins for public methods/classes marked with
@api annotation (stable public API) whenever possible. Such approach guarantees that customization will stay functional after new Magento releases. In addition to
after plugins mentioned in the question, it is possible to create
around plugins to substitute original behavior.
On the other hand, observers are legacy extension mechanism inherited from Magento 1, it is pretty limited and should be avoided if possible. However, unlike plugins, they may provide extension points inside protected/private methods.