Ok, here my finds: You were right, indeed there is no way to modify the limit price of an already submitted order. Limitation on LMAX's side I would say. At least the Java and .Net APIs both have this limitation. FIX of course will let you do a modify with one message but you asked for the Java API.
Workaround: You submit your original limit order with your own custom ID. You then get back a confirm with your own ID plus LMAX's generated order ID. You store in a lookup table. You then cancel and re-submit the same order with changed limit price using the Lmax Order ID so that LMAX can identify which order you want to cancel. Make sure you update the Order ID after you get a confirm after the re-submit (map newly generated LMAX order ID to your original custom ID). You need to of course be careful in case you got a partial fill (mostly applicable for larger order sizes, but entirely valid consideration given LMAX's Retail order book is not very liquid), so that you do not resubmit the original order size but only the unfilled portion with adjusted limit price. Hope this helps. Actually I would strongly recommend to write a base class and interfaces that handle all that because most likely you will encounter the same at most other brokers. The interfaces and should expose basic functionality such as SubmitMarketOrder, SubmitLimitOrder, SubmitStopOrder, ModifyLimitOrder, CancelOrder, CancelAllOrders, .... You will see that if you develop several APIs this will be much better than your current approach, which seems to want to model things the Dukascopy way.
Hope this helps.
Do you mind PM me to chat a bit about your experience with Dukascopy? I am very interested in hearing about your fill quality, slippage, liquidity. I am happy to provide more details for LMAX in exchange. Thanks!