"해 주다" is a composition of "하다" and "주다". Both of "하다" and "해 주다" have a similar meaning (so using it interchangeably will not cause confusion of meaning in usual). However, they have a different nuance.
According to the answer of the National Institute of Korean Language, "주다" in "해 주다" means
앞 동사의 행위가 다른 사람의 행위에 영향을 미침을 나타내는 말
(verb + 주다 means) the action by verb affects the other's act.
Hence "해 주다" means it affects the other one by doing something (implied by the verb "하다".)
Let me give you some examples. In the case of
just means a teacher teaches the students Korean. However,
means not only the teacher teaches Korean, but also the students (possibly) know Korean as a result of teaching.
"해 주다" sometimes insinuates the speaker's seeming care. (More appropriate word for it would be 시혜성, but I do not know the exact counterpart of it in English.) For example.
means no more than "I called to my friend." However,
means not only you called a friend, but you could also have a reason to call a friend (e.g., your friend is seriously injured, so you called a friend to check their status.)