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 before
/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.