A ddname need only be unique within a step. It is quite common to use the same ddname in multiple steps.
There is not much to explain. Every step typically has some number of ddnames. There is no restriction from using the same ddname in multiple steps in the same job. A restriction might be easier to explain - there would be rules to follow. No such restriction exists, so the same ddname may be used repeatedly in a job (not a step).
This is true of cataloged PROCs as well as in-stream jcl.