Maybe something like this would work? :

The most complicated pieces are:
[A] the Brick * Backfacing shader (shown above; the Hidden/collapsed Principled BSDF is just pure Black Diffuse) that I used to get a sort-of dotted-line effect on the faces of the contour lines that aren't currently facing us, and
[B] the gloopy manifold shape itself, which I made in this case by combining Cylinder and Rounded Cube primitives and re-scaling / vertex-smoothing the result a bit
Everything else is just a simple Transparent or Diffuse Shader, and some kind of primitive element (all Circles, in fact, except for the Text object that contains the V; the Contour lines are Circles extruded along the X axis slightly; the text circle is a Circle filled in with Grid Fill and then with a boundary created by extruding and scaling along normals) with a Shrinkwrap modifier on it.
Freestyle
could be used to get a nice, somewhat thicker border on it:

Freestyle only shows up at Render time, so as a limitation, this won't give you a real-time-viewing with boundary line (although with this simple scene Rendering only takes a few seconds).
I also considered two alternatives for getting boundaries:
Normally I would prefer to use the Inverted Hull method (which applies a Solidify modifier and sets the Solidify's Material to have transparent backfacing Faces), since it provides a nice real-time boundary, but it tends to be a bit less clean-looking, and, more importantly, I have not found a way to get the Inverted Hull approach to work when the object's primary material is Transparent or partially Transparent (basic inverted hull is premised on the object's non-Transparent material "blocking" the hull's Transparent material except at the edges, where the Solidify extends a bit beyond the main material and so the Transparent material is not blocked by the non-Transparent one).
If the intention is for students to open this object's .blend file and view it in real-time themselves, then an interesting alternative is to just treat Blender's default active-Object Outliner itself as the Boundary. This outline is normally bright orange, but its color can be changed as outlined in How to change highlight color for icons in outliner panel. There are also 3 options that affect its Thickness in Blender Preferences > Interface > Line Width (but no float/integer-valued setting that I have found, yet, unfortunately).
Lastly, I originally considered an alternative approach: you might also be able to get good results with the Wireframe Modifier
and Replace Original
disabled (and then applying Transparent/Backfacing-Transparent shaders as appropriate to each object, and to the Wireframe's Material). That's the approach I started with, because it feels as if the Wireframe modifier was born to do this kind of thing, but the Wireframe modifier gives you Contour lines that correspond to your actual geometry, and as a result I found it generally created more contour lines than I wanted. An interesting alternative work-around might be to create a low-poly version of the desired manifold (with only the desired contour lines present), Wireframe that, and then Shrinkwrap it to the high-poly manifold object.