Hm, you know, I remembered that post being more interesting, although reading over it again, it really is a lot heavier on polyreduction than I thought. I thought there was more about general implementation.
Minecraft just uses culling, as far as I know, since the issues you bring up with greedy meshes are definitely problems. You can see code for Lysenko’s simple culling implementation here mikolalysenko.github.com/MinecraftMeshes/js at gh-pages · mikolalysenko/mikolalysenko.github.com · GitHub. Although you can see that he does not handle winding order.
But again, I think a naive implementation based on simple neighbor data would be pretty straightforward… basically if you don’t have a neighbor in some direction, put two triangles there, wound appropriately (and then endless work related to caching I’d imagine). I don’t think you’d want to try sharing verts, since you can’t on corners or block type/texture seams anyway, but it’s easy to add that if needed.
As for dynamically creating meshes, it’s actually really simple. Basically you are just populating buffers, the main two being vertices (Vector3[ ], one for each vert in the mesh), and triangles (int[ ], always a multiple of three of course). UV, UV2, normals, tangents, and colors are all per-vertex so you’d create them at the same time.
Winding order can be tricky to get right. I have a distantly-related project on my blog (http://adrianswall.com/?p=229), a retopologizer which goes through a Minecraft-looking phase, and although the code is overcomplicated and the problem it solves is different, the meshing code itself may be of some interest. Also, this recent post (http://forum.unity3d.com/threads/177659-Connect-2-meshes-in-script?p=1215037&viewfull=1#post1215037) creates a cylinder, and actually that’s one of the smallest/clearest examples I can find of building a mesh right now! Where the triangle indices are added, you’ll see it tries to reuse verts… if you instead created new verts and added their IDs for every tri, that would give you a faceted model, which is what you need for Minecraft meshing.
Completely OT: Since you mentioned large terrains, (again pulling from memory here), have you looked into geoclipmapping? http://http.developer.nvidia.com/GPUGems2/gpugems2_chapter02.html That article gets lost in some weird details too, and the technique requires vertex texture fetch, something which iOS used to support but no longer does. Still an interesting concept.
Cheers,
-Adrian