Macro languages allow programmers to define shorthand for sequences of instructions, which are then expanded by a macro processor. This system provides a way to extend a base language, making it a specialized form of programming language. Unlike counters, which track addresses or values, macro languages focus on code abstraction and generation.