Is there a way to control children hairs so they don't cut through a mesh?
Try using interpolated children instead of simple.

Interpolated children are interpolated across the surface of the mesh between the parents. Simple children, on the other hand, are just placed in space around the parents.

Here is a comparison of simple vs. interpolated (click to enlarge):


The left two planes are using simple children, the right two are using interpolated.  You can see how the simple children are hovering in mid-air, poking through the mesh, and not evenly spaced.  While the interpolated children stay on the surface of the mesh and are more evenly distributed.