There are lots of ways to implement swim lanes, depending on how interactive you want them to be. Several ways are described in the documentation.
In version 2.6 Demo1 includes an implementation of swm lanes where SwimLanes are standard GoObjects (actually inheriting from GoSubGraphBase) and collections of SwimLanes are managed as a SwimmingPoolLanes class (inheriting from GoListGroup) and composed to form a SwimmingPool class.
This implementation imposes the restriction that nodes that are part of SwimLanes are restricted to stay within their lane, unless they are dropped into a different SwimLane, either along the edge of the destination lane, or on top of some child of the destination SwimLane.
Users can resize the breadth of individual lanes or the length of the whole swimming pool. Resizing is limited by the existing contents of the lanes.
This implementation also provides several context menu commands to allow the user to add, remove, reorder or rename SwimLanes.