At the moment we have two different concepts of actions (QgsMapLayerActionRegistry and QgsAttributeAction). This requires a lot of code to cover both cases. When offered in the gui, actions have to be retrieved from both registries and things like "default action" are hard to get right.
See e.g. [#15127](https://hub.qgis.org/issues/15127] , where it's missing.
QGIS 3.0 would be a good point in time to refactor the action system in a unified way, where the application provides actions where the functionality part is read only, and just title, short title, enabled ... can be configured (like "set as atlas feature").