The reason is primarily for performance and secondarily for numerical stability. eig() on a Matrix implements a polyalgorithm depending on the symmetries of the input matrix. Certain symmetries, e.g. real symmetric or Hermitian, can be solve significantly more efficiently than the general case, and so eig() attempts to detect these symmetries at runtime and if found, dispatch to different LAPACK routines that are able to take advantage of faster and more stable algorithms. Several other generic linear algebraic functions are written in this fashion, notably \.
(This was recently discussed in the context of issue #4006 with particular focus on sqrtm, whose code is somewhat easier to read than eigfact!. https://github.com/JuliaLang/julia/issues/4006) Thanks, Jiahao Chen, PhD Staff Research Scientist MIT Computer Science and Artificial Intelligence Laboratory
