Это означает, что это:
String className;
if (Math.random() <= 0.5) className = "ca.simpatico.Foo";
else className = "ca.simpatico.Bar";
Class cl = Class.forName(className);
Не будет работать после запутывания. ProGuard не проводит достаточно глубокого анализа потока данных, чтобы увидеть, что загружаемое имя класса происходит из этих двух строковых литералов.
Действительно, ваш единственный возможный вариант - решить, какие классы, интерфейсы и методы должны быть доступны через отражение, а затем не запутывать их. Вы фактически определяете странный API-интерфейс для клиентов - тот, который будет доступен только для размышления.