Как связать Java и C++ в экстремальных условиях?
Вот в такой ситуации у меня получилось следующее, по шагам:
1. Берем target.dll и декомпилируем ее, в результате получаем target.h — файл.
2. Берем target.so для Linux и так же декомпилируем ее, в результате получаем target-linux.h — файл.
3. Сравниваем их(мне повезло и они одинаковые более менее по сигнатурам функций и константам).
4. Скармливаем вот этой утилите — JNAerator, она нам выдает Java-код для вызова с помощью фреймворка JNA
5. Рефакторим сконструированный Java — код и работаем с ним(у меня получилось что функции в сгенерированном коде чуть отличаются по названиям)
6. Пишем декоратор для предыдущей реализации.

Ну вот и все!
Очень сложно переехать с таким зоопарком на линукс в общем случае.
Насчёт выпилить wrapper.dll не очень понятно. Очевидно, это JNI-либа, которая дёргает уже какую-то левую target.dll. Вызывать напрямую в вашем случае практически нереально.
Я писал вместо wrapper.dll консольную утилитку, которая дёргает target.dll, а с ней общался через stdin/stdout. Более негеморное решение я придумать не смог.