so depending on your needs, it may be a non-issue, but for interactive use and busy servers, things are never fast enough as small costs pile on top of each other.
Therefore, it is feasible to update buffers as you suggest. However, when growing an array, you also move what is after, and therefore the relative offsets changes for unrelated content. This means the entire tree must be traversed and have offsets updated. This is also not very expensive, but still much more costly than trivial updates. In addition, adding new fields may require changes to the vtable, adding more complexity to the update.
Doing all of this once, is faily acceptable, but doing it every time a small change is required, such as appending a value to an array, is slow, and the copying evicts useful data in the CPU cache lines adding hidden extra costs.
However, there is another approach that Facebook wrote about (google facebook android flatbuffers), and a related approach that C++ flatbuffer reflection uses (haven't studied the details). This approach stores new updates in a separate buffer and than merges the result once all updates are done. Meanwhile reading such data is more complicated and slower, but the amortized cost of the update will not be too bad.
One can take this a step further and create a hash table that is updated whenever a tree element is updated. The updated data is stored in normal dynamically memory, or some similar heap structure. Vectors are overallocated (using exponential growth). Whenever a tree element is read or written to, the hash table is first visited and if there is a hit, the alternative storage location is used. This is slower than direct flatbuffer use in C, but not a lot slower. Once enough changes have been received, the entire buffer is reconstructed, either before transmission, or simply as a garbage collection strategy. For this to work, an alternative reader interface must be generated which supports this hash table lookup.
The above approach might also be useful for Java, C#, and other dynamic languages even for read only because the hash table can store strings allocated in the language runtimes heap, as I hinted at earlier.