Blueprint has a lot of ‘procedural’ structures, such as loops.
A material is much more like one big function. And because it’s a sort of ‘definition’, not procedural, there is no room for things like variables and loops.
Honestly not sure why this is the case, but may be due to the fact that the material editor is much older than Blueprint. Aside from being updated so that the execution flow goes from left to right, it seems like it really hasn’t changed much since it was first introduced publicly in UDK, and probably UE3 before that.