Нашел решение, которое меня устраивает. Решение дешевое и сердитое

Решил не делать внешний препроцессор, так как потребуется реализовывать свой парсер, обработку выражений и т.д. Зачем? Если все это уже есть в языке Oberon-07. Можно написать программу, которая будет генерировать модуль WinApi для различных параметров. Программа выглядит примерно так:
## Код:
```
MODULE WinApiPre;

  IMPORT Out, p := PreProc;

  PROCEDURE Do*;
  BEGIN
    Out.WriteLn('MODULE WinApi;');
    Out.WriteLn('');
    Out.WriteLn('  CONST');
    ...
    Out.WriteLn('    WM_RBUTTONUP* = 0205H;');
    Out.WriteLn('    WM_RBUTTONDBLCLK* = 0206H;');
    Out.WriteLn('    WM_MBUTTONDOWN* = 0207H;');
    Out.WriteLn('    WM_MBUTTONUP* = 0208H;');
    Out.WriteLn('    WM_MBUTTONDBLCLK* = 0209H;');
    IF p.IntGeq(p.Find("_WIN32_WINNT"), 0400H) OR p.IntGeq(p.Find("_WIN32_WINDOWS"), 0400H) THEN
      Out.WriteLn('    WM_MOUSEWHEEL* = 020AH;');
    END;
    IF p.IntGeq(p.Find("_WIN32_WINNT"), 0500H) THEN
      Out.WriteLn('    WM_XBUTTONDOWN* = 020BH;');
      Out.WriteLn('    WM_XBUTTONUP* = 020CH;');
      Out.WriteLn('    WM_XBUTTONDBLCLK* = 020DH;');
    END;
    IF p.IntGeq(p.Find("_WIN32_WINNT"), 0600H) THEN
      Out.WriteLn('    WM_MOUSEHWHEEL* = 020EH;');
    END;
    IF p.IntGeq(p.Find("_WIN32_WINNT"), 0600H) THEN
      Out.WriteLn('    WM_MOUSELAST* = 020EH;');
    ELSIF p.IntGeq(p.Find("_WIN32_WINNT"), 0500H) THEN
      Out.WriteLn('    WM_MOUSELAST* = 020DH;');
    ELSIF p.IntGeq(p.Find("_WIN32_WINNT"), 0400H) OR p.IntGeq(p.Find("_WIN32_WINDOWS"), 0400H) THEN
      Out.WriteLn('    WM_MOUSELAST* = 020AH;');
    ELSE
      Out.WriteLn('    WM_MOUSELAST* = 0209H;');
    END;
    Out.WriteLn('    WM_PARENTNOTIFY* = 0210H;');
    Out.WriteLn('    WM_ENTERMENULOOP* = 0211H;');
    Out.WriteLn('    WM_EXITMENULOOP* = 0212H;');
    ...
    Out.WriteLn('');
    Out.WriteLn('END WinApi.');
  END Do;

END WinApiPre.
```

Параметры также задаются в модуле написанном на Oberon-07, внешний файл параметров не стал делать, так как потребуется его парсить.

Думаю, что гененировать модуль WinApi потребуется не очень часто, например, раз в пол года, и это решение вполне подходит для этого. При этом не потребуется создавать WinApi модуль с нуля для других определенных параметров, а просто изменить параметр внутри программы, перекомпилировать программу и запустить полученную программу, которая сгенерирует выходной файл с константами.