Почему сниппеты можно отнести к метапрограммированию, это потому, что при их применении происходит кодогенерация во время разработки. И мы фактически имеем некоторый условный язык поверх нашего основного языка для его генерации кода. В особенности хорошо это чувствуется для динамических сниппетов, которые могут анализировать контекст, в котором они применяются, и подстраивать генерацию кода под эти условия.