Its better to give an example first then explain. Here is the source code of a library called libplic_math.a, it is a very simple library with addition(plic_add), subtraction(plic_sub) and multiplication(plic_mul) functions.
In plic_sum_elf.c, The function plic_sum from libplic_sum.a depends on plic_add function from libplic_math.a, so in order to generate plic_sum_elf executable, we have to link both libplic_sum.a and libplic_math.a like this,
$ cc -static -o plic_sum_elf plic-sum_elf.c -L/path/to/libplic_sum_dir -lplic_sum -L/path/to/libplic_math_dir -lplic_math
If we omit -lplic_math, then compiler will throw error saying undefined reference to plic_add symbol. Imagine that you are writing one library like libplic_sum.a which itself depends on various libraries like libplic_math.a, The user of your library also need to be aware of all the libraries which your library depends.
It is unnecessary for the downstream user to know all the details about your library in order to link with your library
$ cc -r -o plic_sum_nodeps.o plic_sum.c -L/path/to/libplic_math_dir -lplic_math
$ ar rcUs libplic_sum_nodeps.a plic_sum_nodeps.o
Now, it becomes easy to generate plic_sum_elf executable, no need to link with libplic_math.a, downstream user only need to link with libplic_sum_nodeps.a
$ cc -static -o plic_sum_elf plic_sum_elf.c -L/pat/to/libplic_sum_nodeps_dir -lplic_sum_nodeps
Here is the Makefile which generates libplic_sum.a, libplic_sum_nodeps.a as well as plic_sum_elf executable.