I believe you could work around the problem with worker process identity by using PowerShell jobs. Here is how I would approach it (I am planning to write blog post on this topic some time).
1. In your Web application add code that hosts PowerShell. This is fairly trivial. This instance of PowerShell will run at whatever identity worker process runs.
2. From this instance you could start another PowerShell process, locally or remotely, using any credentials that will be sufficient to access configuration or your service. To do this, you have to evecute command start-job programmatically, i.e. get runspace, create pipeline, create command object, etc. Pass your script to this job as a parameter. Pass your credentials to this job, you could get credentials from the request.
3. After job is done (it will run asynchronously, you could monitor status or execute wait-job), and you want output, execute receive-job and process output that was accumulated. Execute remove-job to clean up.
To get more details, run "help about_jobs" in PowerShell v2.0. As a bonus you could run job on remote computer (remove relative to your server).
--Sergei