Ok so I just complete two points that come to topic over and over again. Sure, you can create dynamic terrain in Unity as it supports dynamic mesh updates during runtime. I used it in a prototype to procedurally create grass meshes on the shape of terrain at where the player stayed. If he moved, the grass mesh needs to fit to the shapes of the terrain as well so I updated the mesh frequently.
Doing terrain is the same, you have a mesh that consists of points with different heights. This is your base terrain, you know have to do some texture management that is also possible during runtime to place whatever texture is used at that given point in your terrain. You then need to optimize your data by linking larger equal parts together to reduce the mesh size in memory
Second level is dynamic LOD. To do terrain LOD, you usually will split your terrain into a quad tree to determine the cells and cell deepness to display. Some old fashioned tutorials written in C did do this dynamically on camera position change, some other more modern games calculated just the lod chunks once and displayed one for another without recalculation.
Last but not least, it depends on the requirements you have how efficient it is to generate your terrain as it may never change after deployment. Holding meshes in memory means consuming rare VRAM and not-so-rare RAM. Assuming a common setup you have 8 GB RAM and 1 - 2 GB VRAM to consume while hard drives reach 1 TB sin a tandard setup for today. This means you have more time in generating your terrain cells than you have while simply loading them from hard drive. This may make a difference depending on the kind of movement; A walking simulator will have less chunk reloads as a fligth or driving simulator