I know it's a type of capillary electrophoresis, but I don't get how does the separation happen exactly.
Many of us are using isotachophoresis all the time without even realising it. The explanation that follows may not be exact, but I hope that it helps.
Firstly, think about a simple electrophoresis set-up - in agarose electrophoresis of DNA we have a uniformly distributed buffer such as Tris-borate. The current is carried by the borate ions and the DNA molecules run through the homogeneous electric field towards the anode. They separate by size because of the sieving effect of the agarose matrix.
Now let's think about what is happening in an SDS-PAGE separation (a Laemmli gel). Just to remind you:
The running (or reservoir) buffer is Tris-glycine pH 8.3
The stacking gel is in Tris.HCl pH 6.8
The separating gel is in Tris.HCl pH 8.8
When the power supply is turned on, the glycinate ion in the top reservoir begins to move into the stacking gel. When it hits the zone of pH = 6.8 it is much closer to its pKa and so is now only weakly charged. Consequently it slows down. Meanwhile the chloride ions in the stacking gel have begun to move rapidly down through the stacking gel (towards the anode). This creates a discontinuous electric field: the chloride zone has a lower resistance than the glycinate zone so the field strength in the chloride zone is weaker than the field strength in the glycinate zone. This is a stable situation because the ions cannot stray into each other's zones: if a glycinate ion happens to diffuse forwards into the chloride zone it will experience a weaker field and slow down, whereas if a chloride ion diffuses back into the glycinate zone it will hit the stronger field and quickly move ahead again.
What about the SDS-protein complexes that were in the well? (I'll just refer to these as proteins from now on.) Their ionic properties lie between the glycinate and the chloride, and so they eventually end up moving through the stacking gel between the trailing zone of glycinate and the leading zone of chloride. Any protein that finds itself in the glycinate zone will move quickly forward (due to the higher field strength) and any protein that moves ahead by chance into the chloride zone will slow down due to the weak field strength, falling back into the protein zone. And in this way these zones move in a procession through the stacking gel, with the proteins being focussed into a very narrow region in the middle. The glycinate, the proteins and the chloride are all moving at the same speed, and so this is an example of isotachophoresis (isotacho- = "same speed"). The polyacrylamide gel matrix in the stacking gel has no separating function - its role is simply to stabilise against convective effects. The proteins can reach very high local concentrations in the stacking gel, and if you look carefully you will often see refractive effects as your sample runs through the stacking gel. In this way the protein sample is "applied" to the separating gel in a very tight band, perfect for achieving high resolution separation (bands broaden by diffusion in the separating gel so the tighter the bands ar eat the point of loading, the better the final result.)
Once the sample hits the separating gel, all of this breaks down: the pH is now 8.8 so the glycinate becomes strongly charged and zooms off ahead with the chloride through the gel, leaving the proteins to move more slowly due to the sieving effect of the polyacrylamide matrix.
It is possible to set up an isotachophoresis as described above in isolation. Individual proteins will have slightly different ionic properties and will line up in the region between the two buffer ions, allowing for their separation.