Вряд ли я буду сильно полезен, но имел дело с yGuard (у них возможностей и опций как мне известно поменьше чем у ProGuard) — там все подобные вещи настраиваются для отдельных пакэджей или классов. Или же глобально — например «не обфусцировать статические методы», «не обфусцировать имена методов» и т.д.
Примерно вот так выглядят настройки (прямо в билд-скрипте):
  <target name="obfuscate">
    <taskdef name="yguard" classpath="installer/obfuscate/yguard.jar"
         classname="com.yworks.yguard.YGuardTask" />
    <yguard>
      <inoutpair in="dist/guidesigner.jar" out="dist/guidesigner-sec.jar" />
      <externalclasses>
        <path refid="obfuscate-process-path" />
      </externalclasses>
      <rename mainclass="com.alee.designer.app.Designer" logfile="dist/obfuscation.log">
        <!--<property name="error-checking" value="pedantic"/>-->
        <keep>
          <class implements="com.alee.designer.NonObfuscable" fields="private" />
          <class name="com.alee.designer.app.dialogs.pixelgrabber.PixelGrabber"
              methods="public" />
          <class name="com.alee.designer.viewer.DesignerViewer" methods="public" />
        </keep>
      </rename>
    </yguard>
  </target>
Тут, конечно, не всё, но думаю общая идея должна быть ясна.
То что находится между «keep» — как раз исключаемые из обфускации вещи.
Мы немного схитрили, конечно — сделали отдельный интерфейс NonObfuscable — всё что его имплементит автоматически исключается из обфускации (по крайней мере имена методов и переменных) и позволяет в итоге пользоваться классами для сохранения данных в XML.
Надеюсь это хоть как-то Вам поможет.