One reason is that finite differences use "pointwise" approximations, i.e. the derivatives at a particular point in space are approximated from the function values at other points. If the geometry of the points is irregular (expecially in more than one dimension) this is hard to do with high-order accuracy. Efficient finite difference algorithms often use equation-solving methods which rely on a particular pattern of coefficients in the equations, which are are only produced by a regular equally-spaced grid of points.
On the other hand, finite elements can often be formulated using variational principles, which involve minimising a continuous function defined over the area or volume of the element. The function is described by the element's nodal values, and the integration required to minimize the function is done numerically. This is easy to formulate for elements of simple but irregular shapes (e.g. arbitrary shaped triangles or tetrahedra) which can then be used to model any geometrical shape as accurately as required. The density of the mesh can easily be varied to use small elements where the function is changing rapidly and bigger elements elsewhere.
It is not true that all finite element formulations can handle complex geometries well. For example some high-order elements have "weird" nodal variables (for example derivatives like [itex]\partial^3 F / \partial^2 u \partial v[/itex] where u and v are the directions along the edges of the element) which don't match up properly unless adjacent elements have consistent geometry, and/or the corresponding boundary conditions too hard to specify for arbitary shapes.