Yep, just wrote a small program to connect to IB, subscribe to streaming quotes of an ICE-contract and place a limit buy order - all worked.
As a benefit - the API also returns last day's close (75: "Delayed prior day's Close") once upon subscription to the contract's RT prices, so this can be used for EOD price collection (e.g. write a job that starts every day some time after the market closes - (half an hour after close ? - not sure when normally closing prices become available), subscribe to all price\carry\forward contracts of all required instruments, receive last close, save it to db, exit).
I tried on March "CT" (some kind of "Cotton No2" - not sure if that's the right type

):
first need to make this call:
clientSocket.reqMarketDataType(3);
this enables delayed prices, also IB documentation says "If live data is available, it will always be returned instead of delayed data."
https://interactivebrokers.github.io/tws-api/delayed_data.html
so I guess delayed can be used together with non-delayed.
int ctrIdCT = 11115;
IBApi.Contract contractCT = new IBApi.Contract();
contractCT.Symbol = "CT";
contractCT.SecType = "FUT";
contractCT.Exchange = "NYBOT";// SMART - didn't work
contractCT.Currency = "USD";
//contract.PrimaryExch = ct.PrimaryExchange;//not needed
contractCT.Expiry = GeneralHelpers.GetIBFormattedExpDate(new DateTime(2021, 03, 22));
contractCT.TradingClass = "CT";//works without that as well
mktDataOptions = new List<TagValue>();
clientSocket.reqMktData(ctrIdCT, contractCT, "", false, mktDataOptions);
the ticks are coming not as regular Bid\Ask but with different IDs: 66 - "Delayed Bid:", 67 - "Delayed Ask:", 68-"Delayed Last" etc.
One thing: before the markets opened today, I kept getting "-1" for both delayed bid and delayed ask, but after opening I started getting normal prices.
Btw, I returned back my "only > 0" filter for prices because just today I received in PAPER system some negative garbage (I think it was also -1) for SMI, which made my system think it lost a 100k and it started slashing positions

. So I dunnow, I guess next time I'll just have to skip the whole period when oil or something else goes negative.. Or I'll think about it when it happens (hopefully never

)
So yeah, it's definitely possible, and as tgibson11 mentioned, it's also possible to use some fancy IB orders instead of just market which might make execution not as bad..
I would have to make changes in my system to make this work though.. Also, right now my system is tracking open orders, and if the price changed back before the order is filled, it'll cancel it, this will no longer be possible with delayed prices.. So a bit worrisome to execute on a erroneous IB tick, although it's probably possible even now with non-delayed prices (I think?), and worst comes to worst, I have my daily order-count limits..