My notes suggest we added this feature about 7 months ago and you should be able to use pid1=xxx
Therefore using a url such as /node/92?pid1=15215 as a user who has permission to see the Contact involved should see the Contact and the Participation data load on the webform
If you have any problems doing so pls ping me and i will hunt down where our fix got to, but assume we pushed it back to core webform_civicrm
UPDATE
Scenario: Contact xx is registered to Event A and Event B.
Now, if "cid1=xx" is added to the URL - it loads all the participant information of the contact for Events included in the webform and fills the webform. So both event A and Event B will be chosen as selected. Lets say the participant id for event A is yy and the event B is zz.
With our changes(not yet submitted to core) - If a user adds "pid1=yy" to the URL, it will only load the event A information, giving the user the option to update their participant record values via the webform.
So a webform loaded with - "cid2=204&pid2=54" will update participant id 54 information attached to contact id 204.
This has not been pushed upstream (ie to core) as we would need to check if it doesn't harm any other components and create a PR if it seems to be a good addition.