Have the overall status be a calculated field instead of an editable field.
Are your sub-orders linked records or different sets of fields in the same order record?
If the sub orders are in linked records, have a rollup field deferment the status.
IF(
FIND("in progress", ARRAYJOIN(values)),
"in progress",
IF(
FIND("shipped", ARRAYJOIN(values)),
"shipped",
IF(
FIND("delivered", ARRAYJOIN(values)),
"delivered"
)))