Good stuff. void* in itself is great for generics. C does support a templating system, like C++, with a little (reasonable) preprocessor abuse. It gives great cache contiguous results: https://www.github.com/glouw/ctl
You model the key->value relationship, call it an association, and place associations in the set, where the equality/hash functions are performed on the association key.
What do you feel this content adds in context of the article? I can't tell.