(You seem to be using something other than GNUMake, which is the only thing I know, so take this with salt.)
First, you can make your Makefile tidier by making components separate targets:
COMPONENTS = make_a make_b make_c make_d make_e make_f make_g make_h make_i \ library .PHONY: external_lib $(COMPONENTS) $(external_lib): $(COMPONENTS) $(COMPONENTS): @$(MAKE) -s -C $(source_dir)/project/component $(PROJECTVARS) $@
(If you are worried about a clash of names, there are easy ways to handle this.)
Now, if you want to override a variable called, say, VAR, you can do it all in one place:
COMPONENTS = make_a make_b make_c make_d make_e make_f make_g make_h make_i \ library .PHONY: external_lib $(COMPONENTS) $(external_lib): $(COMPONENTS) $(COMPONENTS): @$(MAKE) -s -C $(source_dir)/project/component $(PROJECTVARS) VAR=$(VAR) $@
It is assumed that you want to override the same variable for all components, as I read the question. If you want to override another variable for some purposes, this is easy:
COMPONENTS = make_a make_b make_c make_d make_e make_f make_g make_h make_i \ library .PHONY: external_lib $(COMPONENTS) $(external_lib): $(COMPONENTS) VARNAME = VAR $(COMPONENTS): @$(MAKE) -s -C $(source_dir)/project/component $(PROJECTVARS) \ $(VARNAME)=$($(VARNAME)) $@ make_c: VARNAME=OtherVar make_h: VARNAME=YetAnotherVar
If you want to redefine variables somewhat for some purposes, this is a bit complicated ...
source share