1) DestroyGroup and set bj_wantDestroyGroup = true are not really different. I mostly use the second one, so that I don't create a variable. If you use DestroyGroup, you will need to define a variable within the parentheseis, e.g. call DestroyGroup (udg_group). If you use the second option, you do not need a variable, you can instantly do this:
Custom script: set bj_wantDestroyGroup = true
Unit Group - Pick every unit in (Units in (Playable Map Area)) and do (Actions)
Loop - Actions
and the leak is cleaned.
Finally, you should know that the second case removes the unit group created, right after its reference.
2) It's "call DestroyForce" and it's about the Player Groups. Player Groups leak, however, if you set "All players" in a variable and destroy it, you won't be able to refer to All players again.
3) There are also:
call DestroyTextTag(), call DestroyTimer(), call DestroyLightning(), call DestroyEffect().