There is no easy way to delete something in the middle of a FIFO or LIFO queue. You need to implement your own custom FIFO mechanism for that.
The firmware implementation uses a circular buffer where the delete-from "index" could wrap-around, assuming the index is a relative index from the "top" (or "bottom"?, or you might need "absolute")? For example, how do you determine the relative "index" - do you handle all the possible cases (empty, full, wrap-around, etc.

)
There is no "good" way to do this without making a "remove" instruction hugely complex (just allowing removal of an index relative from "top" vs. "bottom", vs. "absolute" is confusing enough, along with FIFO vs. LIFO differences). This is not a standard queue function (you typically can't do this with library-based queue classes).
If you understand how to do it in C with a circular buffer, array indexing in Do-more can do that, so you could write your own algorithms for FIFO, and corresponding removal, including searching (e.g. "remove value" and also a "remove index" feature), handling all the special case empty/full/wrap-around is do-able. Also, it seems that you only need to implement a FIFO version, not LIFO.