I'm not 100% sure if this is what your talking about... but I'm going to try and contribute, because I think it is a problem I've been thinking about. When you get the surface from surface extractor it is the entire surface, but really you want only as much as you can see. A little extra isn't really a problem, but you don't want the entire sides being drawn if they are going to be covered up by another surface extracted mesh. The solution I was thinking of was to use an "exposed" flag in my internal data structure. That way, when I ask for surface extraction, I only ask for the surface of "exposed" blocks. Everything with neighboring solid blocks is not exposed. I'm actually fairly certain this is what minecraft does, because if you get those lag rendering where you see the tunnels pop in first, then other stuff, it looks like all blocks with one face facing air are drawn, but all the rest of it is not.
This solution obviously does not take care of 100% of what you would ideally get rid of, but it probably takes care of ~80-90% of the problem. The cost of raytracing to see if a tunnel is visible or not is probably not going to net a savings, but who knows, I could be wrong especially if the app is seriously graphics limited.
NOTE: obivously a flag is not nessessary, you could also do 6 if statements checking for a block at each of the 6 faces, but I'm not sure that is that great of an idea, as that is 6 x number of blocks in a chunk (6 * 36*36*256 ~= 20 million if statements...) checks per update, and you have to update every single time there is a modification... might be worth a bit per cube to just do a fetch instead of the 6 ifs, no idea on the reality of that though.
Afterthought: also, I guess if you're saving chunks in data structures in memory then maybe you could generate the flag when you pull the chunk from disk - you only really need to save the currently active chunk as a full data structure (with all the flags and crap) because all the other chunks that are part of the terrain which are for all intents and purposes static only need to be computed the first time. (I don't know if I'm wording this well enough) But the basic idea is that you only need the current chunk, and you don't even have to have a flag, you would just need to check the 6 blocks around the modified block... so then all you have to do is ask your data structure for 6 blocks, modify, and re-extract. Basically this all revolves around having 2 sets of data for the current chunk, one set with only exposed surfaces, and another with every single voxel (which you would only ever care about every single voxel when it is possible to modify one of them, which is usually just going to be in the local chunk(s)). This would seriously benefit memory usage in large environments, because you prune out all the voxel data you don't need when it isn't going to be used.... when you walk onto another chunk then you can use another thread to populate the data structures with full voxel data again.... Actually I'm pretty sure this is what i'll try and implement, the more I describe it, the better I like it

-
I will just have the entire world ask for exposed voxels, save those surface extracted meshs, and then not worry about them. I will then have in memory all the voxels in the chunk my char is on, and every chunk around him. This will serve as a fast way to check what to update for my surface, get a new surface, and bam, it will all be taken care of super efficiently. Also, seeing as disk space is pretty much free (you have so much disk space adding an extra byte to every voxel won't matter at all) I will save my voxels out to disk with a flag if they are exposed or not, so I won't have to check when loading, only when modifying - all this will require is a quick update to disk every time we change anything. I think this is the best system...
EDIT: there is no way to fix this post to be more coherent, besides re-writing it, because I basically thought an idea through and refined it as I wrote... sorry about that, if you have any questions ask me, and I'll try and clarify and maybe even draw a picture.