There are a couple different options here that I think are worth considering. Either of the ones you wrote about would work as well, but I think either of these would work out better.
- Make use of the durable function framework. This allows you to have an activity function for each step, while still using the single queue. The orchestration function would be in charge of determining which of the activity function(s) need to be run based on a given message. This way each function only has a single task, which is recommended, but you have a "hub" that routes messages between those functions.
- Leverage Service Bus topics instead of storage queues. Storage and Service Bus queues allow multiple receivers, but each message will be processed once, so each receiver needs to be able any message. In contrast, Service Bus Topics create a one-to-many relationship, where each subscription gets a separate copy of each message. So in this case you would have one topic and 10 subscriptions- one for each task/function. You can use filters on the subscriptions to determine which function receives a given message, or have each function determine that in their code.