Я не вижу простого решения этой проблемы, как уже говорилось ранее, вы не можете создать несколько экземпляров DLL в приложении.
Может существовать ужасное решение: написать облегченный прокси-сервер для прослушивания входящих запросов и создавать новый экземпляр реального приложения при каждом запросе и перенаправлять трафик на него - должен быть способ загрузки новая копия DLL в каждом экземпляре (технически вы будете повторно открывать одну и ту же загруженную DLL, но она должна иметь отдельные пространства данных).
Тем не менее, с 10k устройствами производительность будет ужасной. Похоже, что лучшее решение - либо заново реализовать протокол (либо использовать опубликованную спецификацию, либо перепроектировать ее).