We have a software program that syncs the Magento inventory with our POS about once an hour. So say for example, we have one blue shirt in size large in inventory. Our POS system imports the order, we ring up the item onto a sales receipt, and then POS knows that the available quantity is zero. Our sync software sends the zero quantity to the Magento database. This is fine if we've already shipped the order. If we haven't, Magento then sees that there is no available quantity for the item, and won't accept a "ship" notification from the tool we use. Thus a shipment is never created, and the order never makes it out of the "processing" stage.
We don't want to not sync our inventory, because we have Amazon order and in-store orders that need to all get recorded in our POS (as the main inventory source). That inventory needs to be kept fresh in Magento, even if we don't ship the packages until late afternoon.
And we also don't want a bunch of orders in the system that don't reflect "Complete". The inventory gets synced correctly to our POS within an hour regardless of any temporary discrepancies.
I'm not aware of a setting that allows for changing the behavior of the inventory management feature of Magento 2.3.x to allow for a shipment regardless of if the item is salable. Our work around is to manually increase the quantity of the items they purchased by one (if it will affect the situation), then create a shipment.
I haven't decided what would be a best practice to avoid this issue, but I'm sure some of you reading this might have a good idea.