How does one use both half and full adders together?
Half adders, compared to full adders, don't have the carry input bit; so they're not necessary, but are used to save hardware when only two bits have to be added.

An example is in the sum of two bytes: the least significant bits don't usually need a carry-in, so can be added with a half adder (or a full-adder with Cin=0).

Another example is the multiplier: here you sum the partial products, but the last bit (the most significant) of each one has to be added only to the carry of the previous sum, so this operation can be performed by a half adder.

Note that in several cases, the saving in area is not worth the additional effort of specifically design an half adder; so a full adder with grounded (or tied at 1 if working with inverted logic) carry-in is used instead.