In this example
ProfileSurface
from the Collection of examples from discourse.threejs.org
holes are created by setting the indices to 0. If you remember the original indices, you can close the holes again. In the example, the holes are always a triangle. But of course you can treat whole areas of triangles this way. The example uses a custom base geometry that is similar to the three.js PlaneGeometry.