В json-e пользователь создает сколько угодно окон, в ручную присваивая им id, позицию, размер и ивенты.
Для каждого окна, пользователь создает элементы интерфейса в виде дерева: изначальный элемент (канвас) присваивается как родитель новым элементам, в свою очередь элементы, чей родитель канвас, также могут быть заданы как родители для других элементов, и т.д., таким образом строится дерево элементов интерфейса, и отрисовывая это дерево, обходя его в ширину (bfs) получается так, что дочерние элементы перекрывают родительские и таким образом пользователь выбирает, что и как должно перекрываться (то есть так реализованы слои).
Для каждого элемента пользователь задает его id, позицию, размер, ивенты, текстуры, параметры и, естественно, родителя (если это не канвас).
Что такое ивенты - ивенты, это функции, либо стандартные, либо написанные пользователем в ручную, которые вешаются на определенное действие (может быть повешено несколько функций сразу, тогда они будут выполняться по очереди), например на клик левой кнопки мыши.
Что такое параметры элементов - это их функционал, элемент может быть невидимым, может не отлавливать мышь, может быть не зависимым от родителя и т.д.
С помощью ивентов и параметров элементов можно добиться абсолютно любых префабов интерфейса, например, выпадающее меню, если задать одному элементу ивент, который будет прятать/показывать другой элемент при нажатии.