There is one really good reason for using alpha masks. A bunch of tilesets need an alpha mask variant to not look boring.
Say you have a tileset consisting of grass and dirt. In this example grass is the bottom layer and dirt is the top layer. You can easily blend the border between these, but it would look straight and dull. You could also create some algorithm that tries to do something pretty for you, but can become cumbersome and most likely performance costly.
Instead, enter "Alpha masks"! define e.g. 64 masks that create "variant" blending. Could be top-bottom, a hole inside the top layer, where you want grass to pop out from(or reverse) and so on.
An easy way to do this is to add an extra set to texture coordinates as vertex attributes in your shader and then blend based on the mask contained within those texture coordinates.
There are a ton of ways of doing this, Alpha masking is just one solution. The big PRO with alpha masking is using it in conjunction with texture atlases/sprite sheets, it can yield huge performance benefits! The big CON is that texture atlases are way harder to implement compared with precomputing a bunch of texture variants and then just using a texture array.
As a side note. If you are going to use texture atlases for tiling, you might want to read up on precomputed mipmaps.