Possible solution to #16.
I chose to hide the NSValue boxing by accepting void * but we could accept NSValue and have the user box the value.
I've just merged this pull request into my own fork (needed some changes there), and it seems that the interface is wrong, since you cannot pass a void * without a type encoding. In such configuration, the callee cannot infer the original type of the struct. I'll send a pull request with another try and proper tests soon.
I'm very sorry for the crazy delay. (I'm finally getting my act together.) Thanks to you both for working through some subtle nuances!