Some linkage models also keep a list of required symbols per symbol rather than per OBJ. This leads to less spurious dependency growth. You can get this behavior in gcc by passing -ffunction-sections.
Other linkage models require the symbol to be found in a container of a specific name (spwcific dynlib) which cuts down on sprouts breakage when unrelated libraries introduce clashing symbol names.
Both of these are, IMO, significant improvements over the classic Unix model.