Вам действительно нужен awk для этого типа работы.С помощью sed попытка удалить слова, которые не соответствуют строке, была бы болезненным (и, вероятно, некрасивым) сценарием для записи.
awk '{for(i=2;i<=NF;i++)$i !~ /var_.*\.h/ && $i=""}1' Makefile
Ввод
$ cat Makefile
test.o: var_one.h var_two.h
test2.o: another_header.h var_three.h archive/something_random.h
Ввод
$ awk '{for(i=2;i<=NF;i++)$i !~ /var_.*\.h/ && $i=""}1' Makefile
test.o: var_one.h var_two.h
test2.o: var_three.h