You really need awk for this type of job. With sed, trying to remove words that don't match the string would be a painful (and probably ugly) script to write.
awk '{for(i=2;i<=NF;i++)$i !~ /var_.*\.h/ && $i=""}1' Makefile
Enter
$ cat Makefile
test.o: var_one.h var_two.h
test2.o: another_header.h var_three.h archive/something_random.h
Output
$ 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
source
share