To compute the Keesom term, the most rigorous way is to perform a rotational average over the interacting molecules, which may require either a molecular dynamics simulation or a Monte-Carlo sampling; the simple "geometry optimization + frequency + single point (+ counterpoise correction)" workflow cannot be guaranteed to capture the Keesom term correctly when the molecules can rotate quite freely, but if the molecules have a relatively fixed orientation with respect to each other (as is often the case for molecules that are not very small), then the rotational average is not necessary, and the usual quasi-RRHO scheme (as implemented in, e.g., ORCA) usually suffices to give accurate results.
In more layman terms, if you don't do rotational averaging, the electronic energy does not accurately capture the Keesom term (and usually overestimates its magnitude), but the thermal correction U(T)-U(0), which you obtain from your frequency calculation, largely corrects the error of the Keesom term, so that if you add the U(T)-U(0) and ZPE terms to the electronic energy to give the energy at finite temperature U(T), you actually have the Keesom term at hand already. Note however that some programs (e.g., Gaussian) uses the RRHO scheme, instead of the quasi-RRHO scheme, in calculating the partition functions; in this cases the Keesom contribution may be poorly reproduced, and the way out is to use third-party tools like GoodVibes (https://github.com/bobbypaton/GoodVibes) or Shermo (http://sobereva.com/soft/shermo/Shermo) to recalculate the partition functions using quasi-RRHO. In any case, even if you do fail to compute the Keesom term accurately, it is not a failure of the functional, but a failure of (quasi-)RRHO.
For the London dispersion term, things are wholly different. The London interaction is a long-range correlation interaction that decays like $1/R^6$. By contrast, all local and semilocal functionals, as their name suggests, have a correlation contribution that decays at least exponentially. (EDIT: it is actually possible to describe a $1/R^6$-decaying interaction with semilocal functionals, but this approach puts high demand on the basis functions and does not capture the required physics, so apparently no one has ever developed such a semilocal functional.) It is because of this reason that they cannot describe the London dispersion term adequately.
Within the semilocal framework, one can parameterize the functional such that it describes the London interaction when the molecules are not very far apart (e.g. the M06 and M06-2X functionals), but as the molecules become progressively far from each other, any parameterization must eventually fail and underestimate the London interaction, because the exponential decay is bound to kick in. Thus, the simplest physically correct way to restore the London interaction is to introduce diatomic attraction potentials with built-in $1/R^6$ behavior, which is exactly the approach used by DFT-D. More robust but costly alternatives (such as the VV10 correction) also exist.