This is an old message, however I've been now adding libiptc-support for upnpd and can say that it's not so easy but very well doable. DNAT is in different module and usually loaded dynamically by iptables, but it's really easy to merge the module code statically to the actual binary. Another thing is kernel modules but they are probably autoloaded almost always these days, otherwise we would have to call modprobe and the benefit we get from using libiptc instead of iptables binary is very small.
It doesn't look like your first question was ever answered about having the external port be allocated for you.
Is that correct? That you didn't find a way to have this happen?
That's right, but then I haven't used linux-igd or UPNP in general for several years now. So what you see in this thread is all there is to it I guess.