One area is its reusability story. Last I looked you couldn't create reusable actions in the same repo you want to call them from, they have to be in an external repo. For quite a while, private reusable actions were an Enterprise-only feature, but that may have been lifted now. The ability to reuse particular jobs is also missing, and communication among jobs is limited to variables after the fact. You can only use success or failure states to trigger other jobs, you can't pass values.
> Last I looked you couldn't create reusable actions in the same repo you want to call them from, they have to be in an external repo.
I'm not sure if/when this changed, but you can definitely do this now.
> You can only use success or failure states to trigger other jobs, you can't pass values.
This is also not true: you can pipe environment variables to $GITHUB_OUTPUT which can be referenced by future jobs.
If anything, the main issue with GitHub Actions is that it's confusing, and the docs don't make it easy to understand how to do things at a high level.