Apart from using retiming of the design to overcome hazards, retiming is also useful for balancing logic between pipeline stages. Re-timing is therefore helpful for meeting timing closure which means ensuring the critical path of the design is short enough that the clock frequency can meet the envisioned target.
D-type migration is a transform that re-codes the state. For example, rather than forming the conjunction of (ANDing) two nets and registering the conjunct (feeding it through a D-type) one can instead form the conjunct of the registered inputs. A complete algebra can be used to annotate each signal with its offset from the designer's first-envisaged timing and D-types shunted around more or less at will. However, it is impossible to put a negative D-type on an input to the circuit (i.e. a gate that predicts the future), instead one must delay every other signal to compensate.