You should be able to administer expression based connection strings from Report Manager. You should be able to turn a hardcoded connection string into an expression based one. And you should be able to make a shared data source use an expression based connection string. And a shared data source which uses an expression-based connection string should be able to refer to report properties like User!UserID or report parameters or anything else. (The expression should not be validated during editing the shared data-source. If you get it wrong, it will blow up during report execution.)
As it currently is, you have to change the RDL when you deploy a report to the development server versus the production server (unless you use a custom assembly to control the connection string, which is a pain).
Also, when you develop a report with an expression-based connection string you lose functionality during report development (like the ability to preview your dataset). With the above suggestion, you could develop the report with a shared data source which is a hardcoded connection string (so you don't lose features during development). Then when you deploy to the server, you can switch it to be a shared data source which is an expression-based connection string.