Example: in step N, you want the item to go to Dave if it's department 10, but Sally if its department 20.
Normally, you'd make 2 steps in the process, one with a department 10 criteria and a user list assigned to Dave, and the other with department 20 and a user list assigned to Sally.
If you try to use route controls, the system only allows you to apply one profile per user list, so if you would need to make 2 different profiles (1 for department 10, one for department 20), assign them separately to Dave and Sally, and therefore you'd STILL need 2 separate steps in the workflow.
It is my experience that steps determine how many approvers, reviewers, etc are in the chain before an approval is complete. Yes, you can assign different user lists per step and steps can have criteria, but usually the user list, not the step, determines the approver/reviewer. Typically, following the Dave and Sally example, an approval with two steps would have two approvers (except when criteria would say otherwise).
As a developer, I would use SQL or PeopleCode to generate a dynamic user list based on transaction keys and the existing approval chain. Functional users, however, don't have that luxury. Route control with roles and user lists allows a functional user to apply criteria without writing PeopleCode and SQL.