The goal is create a binary that is statically linked against the system libraries yet still able to use dlopen() to load dynamic libraries. This seems to be impossible currently in ld. When one specifies both -export-dynamic and -dn one should get a statically linked binary with all of its symbols in the dynamic symbol table. Or a new option should be added that causes all libraries to be linked staticly wile keeping the .dynamic section of the binary. The ELF Spec does not seem to indicate that the dynamic symbol table is required include any SHN_UNDEF entries.
--export-dynamic currently does nothing unless there is at least one dynamic object involved in the link. You could work around this by linking a dummy .so.
I think this has been fixed. --export-dynamic --no-dynamic-linker is the magic option combination.