For matching terrain in streaming levels I suggest you take a look at world composition.
Or you could create your landscape as a single actor and them split it. Move the sections into sublevels.
As for caves. You would need to add a “Landscape Visibility Mask” node to your landscape material. Connect it to Opacity Mask. Then set the material to be masked. This allows you to create holes in the landscape that you can then decorate with static meshes and add a cave inside.