Estender uma biblioteca compartilhada vinculada dinâmica?

Eu sou novo em C, desculpe por minha falta de conhecimento (meu C-book aqui é realmente enorme :)

Eu gostaria de estender uma biblioteca compartilhada (libcustomer.so) com código fechado, mas a API pública conhecida.

É algo assim possível?

renomear libcustomer.so para liboldcustomer.socrie uma biblioteca compartilhada estendida libcustomer.so (para que outros usem implicitamente a estendida)link liboldcustomer.so no meu libcustomer.so estendido via -loldcustomerencaminhar quaisquer métodos não implementados diretamente para o antigo "liboldcustomer.so"

Eu não acho que funcionaria assim (o nome é compilado no arquivo .so, não é?). Mas qual é a alternativa?

Para o 4: existe uma maneira geral de fazer isso, ou eu tenho que escrever um método chamado como o antigo e encaminhar a chamada (como?)?

Como o libcustomer.so original (= liboldcustomer.so) pode mudar de tempos em tempos, todas essas coisas devem funcionar dinamicamente.

Por razões de segurança, nosso sistema não tem LD_PRELOAD (caso contrário, eu levaria isso :().

Pense em verificações de validação estendidas e alguns melhores manuseios de NPE.

Agradeço antecipadamente por sua ajuda!

EDITAR:

Estou apenas implementando minha extensão como mostrado na resposta, mas tenho um caso não tratado no momento:

Como posso "proxy" as estruturas da biblioteca estendida?

Por exemplo, eu tenho isso:

customer.h:

struct customer;

customer.c:

struct customer {
    int children:1;
    int age;
    struct house *house_config;
};

Agora, no meu cliente-extension.c Estou escrevendo todos os métodos públicos de customer.c.c, mas como eu "pass-thru" as estruturas?

Muito obrigado pelo seu tempo e ajuda!