Dupligroups and Snapping
Blender is unfortunately very limited for use in precision modeling and CAD like operations.
It's snapping tools and precision transforms are very lacking. Dupligroup handling is one of it's many shortcomings, this is a know limitation of the system, you can't really control what to snap to and from with empties.
You can still snap to the linked geometry, but when transforming the empty itself with a dupligroup you can only use the empty's center as base snapping point.
Workaround 1 - Don't link as group, link as object.
If it's just a single object we are talking about link it as an object instead.
After linking make it a Proxy with Ctrl + Alt + P or make it Local with L &gt; Selected Objects.

Upside is you get the unexpected benefit of overriding several types of data locally while maintaining the linked geometry, like materials, and even modifiers

Downside is it only really works well if it's a single object. (you wont be able to easily add new objects to the linked instance unless you merge them all together into a single bulky mesh.


Workaround 2 - Use a dummy mesh object.
Note: This has been deprecated for Blender 2.8+ mesh objects can no longer have Collection Duplications
By default when you link a group instance it links through an empty object, which limits it's snapping options. Instead use it as a dupligroup on a 'dummy mesh'.
A dummy mesh is a purpose created unrenderable mesh object that is used solely for the purpose of snapping.
You can custom create it's geometry exactly with only the points you exclusively want to snap to. That will give you a 'custom snapping cage' with only the relevant points for freely snapping to/from.
Just create a mesh object, model it regularly as you see fit, and in the end select all with A then delete all with X &gt; Only faces.
That will render the object invisible to rendering, in theory not weighting down the scene performance, but give you a valid snapping geometry tailored to the specific object.
Then just go to the Properties Window &gt; Object &gt; Duplication &gt; Group and pick the previously linked group.

The Downside of this technique is that you have to model extra an snap cage, for each relevant object, it's extra geometry weighting in your scene and slowing the viewport down. Also if you want to add more instances of the group easily you'll have to duplicate the existing mesh, so it always keeps the relevant cage.
Upside is you get a custom tailored snap geometry, with exclusively the points you want to snap to/from. Should not affect rendering performance, and it can additionally hold materials for easy overriding if necessary.