If only you could wave a hand over your finished object and make all the little ends tuck themselves away neatly. If I can I join spit-splice new yarn in as I go and weave in remaining ends along the edges of seams or pseudo-seams (ie. where stitches were picked up along a selvedge). I learned to weave in ends within the fabric of a piece by duplicate stitching on the wrong side like this. The result is very neat from the wrong side, but I find it often creates visible bulk on the right side because you’re actually going under the stitches. It’s a good option if you’re making something reversible, but otherwise I prefer to use a sharp needle and follow the path of the stitches in the same way but only skim the needle through the yarn rather than under it.
It’s more visible on the WS (even when not done in a contrast yarn!) but the fact that the stitching sits on the surface of the fabric means that it’s not pushing the original stitches out on the RS.
The zig-zag pattern has a similar effect to the zig-zag stitch on a sewing machine: it allows the fabric to stretch without breaking the stitching. It also makes it harder for the end to come loose – skimming the end in in straight lines can pop out easily when the fabric is stretched.
If the project is small the easiest way to untwist the plies is to split them a little and then let the project dangle from that strand. Don’t do that with an adult sweater though, the yarn will probably break off and weaving in almost non-existent ends isn’t fun at all!