I would divide map onto different parts of some area. For example if you have 1000 units = 100 y units and 100 x units you divide generated area to 1000/100 = 10 parts that have area 100, 10 y, 10 x.
Before that you generate black part as a 1 mesh and then generate other things inside that mesh if you need it, but then I would suggest to cutout space for these objects as probably they will have some scripts attached to them and they can't be part of the mesh.
And then while you divide your mesh into chunks with 100 area you divide the mesh too, add to those chunks some script that it's x, y position in jagged array of all chunks. Raycast from camera to enable current chunk neighbour chunks((x;y) +(0;1), +(0;-1), +(-1, -1).....). And if the chunk you were raycasting changes find the difference in x, y in array. Then you have all you need to find chunks that need to be disabled in array.
As for the mesh. You can raycast it and rebuild mesh on point where it was raycasted, but that is complicated and somehow inefficient and for example if you want to have blocks that change texture or crack it would be pain to do that. So what I suggest is those blocks that are near white area should be just normal blocks not attached to the whole mesh. And also for optimization those blocks could consist of group of 4 blocks, so if one block from the group gets destructed, mesh that is near those group should rebuild and on it's place should appear new group of 4 blocks. So now if player made a tunnel between mesh, the whole mesh would not rebuild, but just a part that was divided and also if he decides to just dig 3 blocks and go on it's better when he doesn't rebuild the whole mesh.
Also I would just made it not a mesh, but just a bigger cube, that gets replaced with 4 smaller and so on.