Opa Filipe, boa dúvida! Vou tentar responder passo a passo!
A gente pode pensar no position absolute como uma propriedade que 'descola' o elemento da tela, como se ele ficasse à frente dos outros elementos. Como ele está à frente vc pode posicionar ele em qualquer lugar da tela utilizando as coordenadas: 'Top, left, bottom e right'.
Essa coordenadas posicionam o elemento em duas dimensões, o Z-Index é como se fosse uma coordenada dessas também mas posiciona ele numa terceira dimensão, ou seja, mais pra frente ou mais pra trás ( pensando em profundidade ).
Dessa forma quando vc tem múltiplos elementos descolados da tela ( position absolute por exemplo ) vc pode definir qual vai estar mais pra frente ( menos profundo ) e qual vai estar mais pra trás.
Bom, é para isso que serve o z-index. Muitas pessoas também pensam no z-index como prioridade entre os elementos position absolute, isso porque se um está mais pra frente do outro ele fica por cima um do outro.
Outra coisa que notei na sua pergunta é que z-index não tem o valor só de '1', por exemplo. Ele pode ter valores de qualquer número. Quando vc quer que um elemento tenha sempre prioridade vc pode colocar por exemplo z-index: 9999; Daí não tem erro ( apesar de meio estranho as vezes ).
O position fixed como o próprio nome já diz ele fica o elemento na sua tela. Já viu aquelas 'navbars' que ficam coladas no topo do site o tempo todo? Aquilo é um exemplo de position fixed. O position absolute não tem essa característica, o elemento não fica fixo e nem seguindo a tela o tempo todo.
Espero que eu tenha ajudado em alguma coisa, abração Filipe !