I think it's also important to note this is a good fit with the structure of Lisp: while nested buffers can of course be represented naturally in Lua too (or even JSON), Lisp offers a more natural way to have them intepret themselves, because the relevant code (e.g. command) can be directly embedded in the data structure, without requiring a separate interpreter. Maybe this difference seems small, in that the "interpreter" in Lua could be trivial, but the nice thing about embedded code is that it's context-free, and can even take into account updates to the "interpreter".
Also note that Lisp's (unnumbered) lists (also available in JSON, of course) are a more natural match to real "lists" than Lua's tables in array mode; doing real linked lists in Lua is both ugly and inefficient. (Possibly worth thinking about a tiny C module to do it properly?)