I had to do something vaguely-similar to this once, and what I decided to do was to define each SQL-statement definition (there were hundreds of them) as consisting of SQL text, with the appropriate placeholders, and a separate list of parameter-names, which were taken from a list of (use) constants. The number of entries in the parameter-name list had to exactly match the number of placeholders in the query definition (which was basically hard-coded into the app). Anyhow, to run a query you specified the name of the query and a hash of named parameters. When building the DBI request, the (positional...) parameters were resolved by name ... by my Perl code, before running the query. It was easy to write and worked very well in practice.
I freely admit that I find the notion of a :name syntax to be quite intriguing, and instantly see how such a thing could be generally implemented (even to the point of idly wondering if it could be a Perl fee-chur, maybe through some mix-in package?). It would have been an improvement over my original idea to be sure.