You could look at the
Simple Build For Pipeline Plugin, combined with some TBD way of automatically creating job configurations (perhaps something like the
BitBucket Branch Source Plugin). The Simple Build For Pipeline has a base class that can be expanded to support a custom mini-DSL code job declaration, and implement a Pipeline DSL flow inside a plugin of your own writing. With that plugin, users are presented with a high level declarative view of their flow, so they can turn knobs on their flow. This declarative view could be stored in their source code repo (git) as a "Jenkinsfile". The BitBucket Branch Source Plugin can scan BitBucket repositories and create jobs for projects that contain a special file literally named the "Jenkinsfile" (optionally one job per branch, even one job per pull-request if you wish). This Jenkinsfile could contain the call to the extension of Simple Build. The extension of Simple Build has to be a plugin that is uploaded to Jenkins. It provides many advantages: it can be unit tested as a Jenkins plugin on the command line (mvn test), and the flow becomes available as global variable in Jenkins (thus making it available to any job configuration in Jenkins). Conceptually, you could have multiple custom Simple Build extensions (each one as a different plugin of your own, or many in the same plugin of your own): one per type of job you need to run.
Conceptually, that is the closest I have come to being able to test the job configurations before I deploy them, the closest I have come to give users the ability tweak their build parameters in their own source code without making everyone an administrator. But I am still lacking the ability to create multiple jobs per project (i.e. multiple Jenkins jobs for each user (git) repository). Unfortunately, there can only be one Jenkingfile per branch, I wish I could have many since I don't want my pipeline all in the same job config.
Conceptually, if the Simple Build plugin extension is kept backwards compatible (which should be doable with good enough unit tests on the custom plugin), rerunning older builds, even years later, should be possible.
It is still a work in progress for me.
Hope this helps,
Martin