A pointer in code, or a dynamic link would be the same.
The executable itself doesn't have to be dynamically linked to a shared object. You can use the shared object loader from your code (dlopen, etc) to import other code into your application's address space. Arbitrary code can be included from arbitrary libraries at runtime.

Since this is done on the user's system after distribution, you'd have a really hard time arguing that the GPL is even involved.