But where is bounds of every zone? Is zone something virtual which bounds we can calculate when we put files all together? Or zone just are set of selected files (scattered all over a disk)?
The zones are virtual at first. You can use Add- and MakeGap to set the position for the next zone as well as to enlarge a zone. The size of the zone is determined by the files that have been selected. By default, the first zone is placed at the beginning of the volume, the second one right after that and so on. Also see Zones
Where is ZoneEnd when we use Defragment() which does not consolidate files into single piece?
Defragment() ignores the zone end. You have to use FastFill (or similar) to consolidate files.