Can't change shapekey values on a linked mesh?
You could use a combination of an armature and drivers. After you link in your object you make a proxy of the armature which allows you to pose the armature in the new file and still get updates from the source file.

Once you have the shapekeys setup, create an armature and add a bone to be used as the controller. Go back to the object and in the shapekey list right click on the shapekey value you want to drive (or select the key and right click on the value underneath) and select Add Driver.



To define the driver you switch the graph editor to display drivers and show the properties sidebar by pressing N. You may need to click the value name in the list for the driver details to show.



Then you can choose the armature and the bone and have one of it's transform values used as the value for the shapekey value. In this example I am using the x location of a bone called DriveKey1 to control Key 1. Now as I move the bone along the x axis the shapekey is turned on/off.

I also chose Sum Values for the driver type. Scripted expression can give you more control but also can be disabled through blender's auto execution setting. Using Sum Values gets around this.

With the option to set custom bone shapes and use constraints to limit movement, it is rather easy to create a clear visual controller that you may have seen with some rigged characters.

Tutorials on rigging a face often show this technique when setting up mouth and eye controls.