All of what you said seems completely doable to me.
Primarily I want it to comment/annotate changes so peer review focusses on logic and warnings are clear.
You can. See https://docs.gitlab.com/ee/ci/variables/predefined_variables.html
CI_PIPELINE_SOURCE
How the pipeline was triggered. Can be push, web, schedule, api, external, chat, webide, merge_request_event, external_pull_request_event, parent_pipeline, trigger, or pipeline
You have full access to the API and can do whatever you want in the MR too.
I want the ability to specify multiple reusable pipelines, in a central place. This is not possible in cloud.
You can, with CI templates. Templates can be in a completely different repository
Lastly I would like to have multiple potential pipelines in a repository (e.g. smoke test and release).
I do have different pipelines for staging and production in my projects with no issue.
I'm only using the hosted version, it works. I do have a separate gitlab-runner in GCP at the moment though that is working fine.
If something doesn't work for you I suggest creating a ticket?