The dlopen(3) approach is good for guaranteeing extensibility if the iconv implementation is distributed without source. (Or when, as in glibc, you cannot rebuild iconv without rebuilding your libc, thus possibly destabilizing your system.)
The libiconv package achieves extensibility through the LGPL license: Every user has access to the source of the package and can extend and replace just libiconv.so.
The places which have to be modified when a new encoding is added are as follows: add an #include statement in iconv.c, add an entry in the table in iconv.c, and of course, update the README and iconv_open.3 manual page.
The upshot of this is that adding new encodings through some
iconv-encodings package will be a pain in the ass and would cause breakage in unexpected, fascinating ways. But, there are smarter people than I out there, and maybe something can still be done.
Of course, this also means that we would not get FreeBSD “for free” (though, I imagine
xmlparser doesn’t build on it, anyway) and we would have to come up with a solution for it as well.
What a mess.