Em anos
e
por anos
normalmente significam a mesma coisa: um período de tempo no passado que consiste em anos.
"Eu não o vejo há anos" e "eu não o vejo há anos" significam o mesmo, embora para meus ouvidos "há anos" pareça mais informal ou idiomático.
Só as vezes
por anos
é apropriado: "Durante anos, ela se perguntou se ele voltaria para casa". Nesse uso, significa "por muitos anos" da mesma maneira que você pode dizer "por cinco anos".
Ao longo dos anos
é diferente. É usado quando você está pensando em um longo período de tempo (geralmente no passado) e considerando algo que aconteceu ou irá acontecer
durante
naquela época:
"Esta cidade mudou muito ao longo dos anos."
"Ao longo dos anos, a empresa cresceu de uma pequena operação administrada por duas pessoas para uma grande organização multinacional que emprega milhares".
"