A sintaxe é bem clara sobre isso pelo que posso dizer:
Usage: ip tunnel { add | change | del | show | prl } [ NAME ]
[ mode { ipip | gre | sit | isatap } ] [ remote ADDR ] [ local ADDR ]
[ [i|o]seq ] [ [i|o]key KEY ] [ [i|o]csum ]
[ prl-default ADDR ] [ prl-nodefault ADDR ] [ prl-delete ADDR ]
[ ttl TTL ] [ tos TOS ] [ [no]pmtudisc ] [ dev PHYS_DEV ]
Where: NAME := STRING
ADDR := { IP_ADDRESS | any }
TOS := { NUMBER | inherit }
TTL := { 1..255 | inherit }
KEY := { DOTTED_QUAD | NUMBER }
NAME tem que ser um STRING, por isso não pode ser um padrão de caractere curinga. Eu sei que você esperava evitar isso, mas sua melhor aposta seria escrever um wrapper de shell que faça algo assim:
#! /bin/bash
PATTERN="$1"
for t in $(ip tunnel show | awk -F: '{print $1}' | grep -E "$PATTERN"); do
ip tunnel del $t
done
Depois, chame seu script assim: deltunnels.sh "^blah-*"
Acho que isso deve funcionar.