Typically it's used in a package containing scenarios executed asynchronously and each of those asynchronous steps need to complete prior to some subsequent step starting.
e.g. Consider a package with 4 scenarios, A, B, C and D.
A --> B --> C --> D
A, B and C are to run asynchronously and D must run ONLY after A, B, and C have completed. In this example, we'd place an odiwaitforchildsession task after task C so that D won't start until A, B and C have completed.
A --> B --> C --> odiwaitforchildsession --> D