So what is so special about workflow? After all, dependencies can be handled programatically. If action A is followed by action B, then action A can just invoke action B when it is complete. Concurrency can be handed by threads.
What workflow generally provides over a manual implementation is
Ease of implementation
If there are complicated dependencies, these are tracked by the workflow engine. Each action doesn't need to worry about what comes before or after it. This also allows actions to be more easily abstracted and reused.
The workflow engine also ideally handles persistence. Processes can be long running, taking weeks or months to complete. The workflow engine will handle persisting the state of the workflow, so if the containing program dies, needs to be update or restarted, the process will not be lost.
Ease of definition
Workflow system generally provide an easier way of designing and/or specifying process definitions than by doing it manually in code.
Generally workflow systems can read in process definitions in a human readable file format.
Many workflow systems also provide visual editors.