Details

The big question is "how is Enhanced Editor Controls (Layout for short) different than the existing editor API?"

1) Layout uses a hierarchical (parent/child) approach to controls and positions of controls.  At the top level, a layout owns layout items.  Layout Items can be other layouts, controls or widgets.  Layouts may be linear (vertical or horizontal for example) or multi-dimensional (such as a grid).  Layouts are intended to be used with other layouts to configure the final positions of the controls.  For example, if you want a list of text inputs and then an Ok and Cancel button at the bottom, you would use a horizontal layout for the buttons and add that to vertical layout for the text inputs.  See the LayoutTestDialog for some examples.  Layout Items provide hints to the Layout on how they should react when stretched or contracted.

2) Layout Items can be other layouts, controls or widgets.  Generally speaking, a layout is a list of controls but sometimes it can have additional configurations like a grid.  Controls are very basic input objects and they tend to have a text label, icon, and tooltip.  Widgets are more complex configurations of one or more controls and often will have their own internal layout.

3) Most controls store bits of data for the user.. the "what you are editing" part.  Buttons don't tend to store data but labels, text inputs, sliders, checkboxes, and many other simple controls store data.  The data can be set in three different ways - using a SerializedProperty, a getter/setter function, or directly (internally).  The controls are smart enough to figure out which one you are using and retrieve or set the data as needed.

4) Many states and settings use a Conditional instead of a simple boolean value.  A Conditional object allows the use of getters and setters or direct value storage similar to controls.  Why is this useful?  It allows the programmer to specify a callback for a visible or enable check instead of setting a boolean flag.  A control or layout may not be enabled unless some other value is set for example.  Most objects provide a set of xxxxIf functions for setting the Conditional's callbacks.

5) Unity's editor controls use the same callback but with different event flags and this can make it confusing to know what's really going on.  Enhanced Editor Controls has one main callback where all the controls are instantiated.  Layout and rendering happens automatically using the default base classes for EditorWindow, DecoratorDrawer, PropertyDrawer, and Editor.  Deep inside the Layout code is where the magic happens.  Controls will pass messages along to the Unity editor controls as need and create or render them as needed.  Why is this important?  It's because Layout separates the code for data and presentation and allows more control over how the data is rendered and stored.  Ultimately it makes it a lot easier to get the controls where you want on the screen and behave the way you want.  It makes it easy to add new custom controls such as tables and lists and tab controls.

6) The API allows for chaining.  This means that most public functions will return a copy of the object and allow you to chain commands together.  For example, "vlayout.addItem(new Button(onClick, "Min").resizeMode(ResizeMode.Min, ResizeMode.Min));" is adding a new button to a layout and setting the resize mode at the same time.

Here's a more complex example:
                BoxLayout vlayout1 = new VBoxLayout(); {
                    vlayout1.addItem(new TableWidget(5"My Table").
                        setColumn(0"Column 0").setColumnMinWidth(0150).
                        setColumn(1"Column 1").setColumnMinWidth(1150).
                        setColumn(2"Column 2").setColumnMinWidth(2150).
                        setColumn(3"Column 3").setColumnMinWidth(3150).
                        setColumn(4"Column 4").setColumnMinWidth(4300).
                        addItem(new TableWidgetItem("Item 1").
                            setText(0"Item 0, Cell 0").
                            setText(1"Item 0, Cell 1").
                            setText(2"Item 0, Cell 2").
                            setText(3"Item 0, Cell 3").
                            setText(4"Item 0, Cell 4") ).
                        addItem(new TableWidgetItem("Item 2").
                            setText(1"Item 2, Cell 1").
                            setText(2"Item 2, Cell 2") ).
                        addItem(new TableWidgetItem("Item 3").
                            setText(3"Item 3, Cell 3").
                            setText(4"Item 3, Cell 4") ).
                        addItem(new TableWidgetItem("Item 4")).
                        addItem(new TableWidgetItem("Item 5")).
                        addItem(new TableWidgetItem("Item 6")).
                        addItem(new TableWidgetItem("Item 7")).
                        addItem(new TableWidgetItem("Item 8")).
                        addItem(new TableWidgetItem("Item 9")).
                        addItem(new TableWidgetItem("Item 10"))
                        );
                }