Boa tarde,
A forma mais utilizada para comunicação entre aplicações, é um serviço, normalmente sendo um serviço REST.
A utilização de DLL tem algumas questões que precisam ser levadas em consideração, como a arquitetura, DLL 32bits, DLL 64bits, isso influência, enquanto para um serviço, não existe essa preocupação.
A DLL criada para ADVPL precisa seguir um padrão, e normalmente você precisa ter um client, pois a grande maioria de funções que abrem um DLL em ADVPl, fazem isso no client e não no server, não conheço nenhuma DLL que seja aberta pelo server exceção pelas DLLs que fazem parte do próprio binário, como a dbapi.
O serviço você tem a preocupação de performance e memória, uma vez que o serviço for em ADVPL, você vai subir o serviço de REST, que fica escutando uma porta, por vezes com o ambiente aberto, tudo isso tem um impacto de performance e memória no seu servidor.
Não vou te dar uma resposta, acho válido inclusive você desenvolver um POC para ambas as situações, e inclusive te passo uma terceira forma, é possível fazer isso utilizando RPC, o appserver está apto a fazer isso, inclusive utilizando de linguagens distintas, a famosa função RpcSetEnv nasceu disso.