Swimlanes serve to denote and set common performers for multiple elements of a process workflow: if a human task has no performer, the performer set the closest ancestor swimlane is used. This applies to elements in Reusable Sub-Processes.
Swimlanes can contain any element allowed by their parent entity, be it a Plan, BPMN-based Process, or Sub-Process: if you are using Swimlanes in a Plan, you can use the same elements, which you would use in a Plan normally.
A Pool groups a workflow executed fully or partially by a common set of performers, typically one organization or department. It sets the common performer set: The performers property set on the Pool is adopted by process elements that require the performers parameter but do not define it themselves.
Each BPMN-based process, plan body, or sub-process may have an arbitrary number of Pools with one Pool marked as the Main Pool: Only the flow in the Main pool is executed. Non-main Pools serve for informational purposes only and are excluded from validation.
Pools may contain an arbitrary number of Lanes. Once a Pool contains at least one Lane, the Pool cannot contain any other BPMN elements: all flow elements must be in a Lane.
Sequence Flows cannot cross Pool boundaries.
A Lane holds a part of a workflow of its parent, either a Pool or another Lane, and defines the performers of the activities in the Lane.
A Lane can contain other Lanes: if a Lane contains a Lane, it cannot contain any other BPMN elements. All workflow elements in a Lane take over the Performers parameter value of the Lane. If a parent Lane does not define the parameter, the parameter of the "closest" parent Lane is used. If no such Lane exists, the performers set on the Pool are used.
Sequence Flows of Lane workflows can cross Lane boundaries.