You have to remember that the preprocessor (which handles macros) is not the compiler and doesn't need semicolons to terminate the "statements".
Macros are replaced quite verbatim, so in the latter example the line
LEDS = 0x01;
will, after the preprocessor replaces the LEDS
macro, be
P4; = 0x01;
which is not a valid C statement.