Can I move just some of the verts on a mesh?

I would say “terrain,” but I don’t think I want to use Unity’s built-in Terrains for this.
What I am trying to avoid is setting every single vertex’s position every single frame when there are only a handful of them that are actually being moved. I think being able to do this is make-or-break for the feasibility of a new game concept I’m kicking around.

I think I should have an array (dictionary) of vertex numbers vs world space x-z coords. Then another of vertex numbers vs an array of all the numbers of that vertex’s closest neighbors. (Which is probably harder to calculate than it is to say.)
Am I on the right track though?

The procedural examples all iterate through every vertex in a temporary array and then set the mesh’s vertex positions (or colors) all at once. Is there some reason why you “have to” do it like that?

You must update every vertex in a mesh even if you only are changing a few. However, you don’t need a temporary array. You can use a permanent Vector3 array for the vertices, and only change the relevant entries, but doing “mesh.vertices = myVertices” copies the entire array to the mesh, and is the only way of updating meshes.