Боюсь, то, что вы пытаетесь сделать, невозможно, как вы предлагаете это сделать, поскольку - как вы уже упоминали - (GNU) make допускает только один ствол "%", см. http://www.gnu.org/software/make/manual/make.html#Pattern-Rules:
Шаблонное правило выглядит как обычное правило, за исключением того, что его цель
содержит символ «%» (ровно один из них).
Без этого создание таких «многомерных» целей будет громоздким.
Одним из способов решения этой проблемы является перестройка имени зависимости в команде (а не в списке зависимостей):
SRC := a.dat.1 a.dat.2
all : $(SRC:%=%.dat2rlt)
%.dat2rlt :
dat2rtl $(word 1,$(subst ., ,$*)).rlt.$(word 2,$(subst ., ,$*)) $*
Однако, конечно, таким образом вы потеряете зависимость, она не будет перестраиваться после обновления rlt.
Единственный способ решить эту проблему - явное создание правил:
SRC := a.dat.1 a.dat.2
all : $(SRC)
define GEN_RULE
$1.dat.$2 : $1.rlt.$2
dat2rtl $$< $$@
endef
$(foreach src,$(SRC),$(eval $(call GEN_RULE,$(word 1,$(subst ., ,$(src))),$(word 3,$(subst ., ,$(src))))))