Yeah, I debated that myself. These are the points I went through in my head:

1. The option around memcopies would be to pass the char* around and thus force the user (foghorn) to handle char * for sample names. Definitely don't want that.
2. Accessing heng's hash table directly is impractical because the khash macros expand all the functions (including unused ones) and it would be impossible to pass compilation here with warning turned on. 

Now the bottom line is that the access of functions in the header should never be performance intense. Most of the uses of the header are one time only. If we ever find users making repeated calls to these functions we can think about caching them or other optimizations.