Macro and expression blocks are special blocks that can contain routines. This is used in order to simplify routine building and keeping a tidy look.
The main difference is that the Macro Blocks can function as a pipe in a logic flow, whereas the expression blocks function as a result themselves, and therefore a stop in a logic flow.
This can be easily observed as the expression blocks do not contain logic gates.
These can be edited by clicking their name in the sidepanel. A new workspace will be launched contained in the macro or expression which can be edited like any other routine.
The blocks also have further customisation options. More details in the Logic Builder App under Macro Block Settings, here.