This is going to be a custom implementation and we will not be able to provide in depth support of it but here is an overview of how you could accomplish this.
You would first want to modify your cart display to add in your form elements. The first part of this where you would like the user to make a selection with the radio group then have the list be enabled to choose the location can be done with client side validations and using either the Validation Toolkit or the new CSS Form Builder. You can apply the validation to the radio group, then as a response you can use the enable/disable form element to make the list selectable.
Once you have this part worked the next thing to do is set some session variables at the top of your cart page to hold these values. You can use the regular eCart set session value server behavior for this. You would want to store a variable to indicate the user is picking up, then another for the location.
When you have all of this in place you can then alter the existing shipping. In your shipping charge rule you will add in another condition to the trigger, you will check if your pickup session variable is not equal to the value you set in the set session variable server behavior. You will also need to update the confirm page to set this session variable to an alternate value if it does not exist, this will help to prevent any errors occurring in the charge rules.
Finally you can update the display on the confirmation page and the email based on the value of the session variable. If pickup was selected you will display the pickup info, otherwise display the standard shipping information.
I know this is a bit of info but if you have questions about any part of it let us know and I will help you with whatever I can.