Looks great, is there a way to shorten those MACROs, a little too verbose/lengthy for readability, it's probably just me.
Thankfully it only affects the instantiation of the template. When you use the resulting code, it's only as verbose as your name for it. You can call, say, an int vector "iv"; the type will be iv_t and functions will be iv_init(), iv_destroy(), etc.
As for Pottery's internals, they're pretty verbose everywhere unfortunately. I did abbreviate a few things (like "open_hash_map" is "ohm" internally) but in the end I just decided to embrace the verbosity.