Let’s discuss ACC, and the way people kinda ignore the whole “dead stay dead” idea. Sephiroth is the most obvious example, but Aerith and Zack are clearly more than figments of Cloud’s imagination - they both actively take part in events.
With the healing rain/holy water, it’s pretty obvious how Aerith takes a physical effect on things. She also takes Cloud’s hand during the fight with Bahamut Zero, joining in with everyone else in giving a literal and figurative boost to his strength. Notably, though, Zack isn’t there. Zack doesn’t show up at all, in fact, until Cloud has taken quite a beating from Sephiroth.
So seriously, where was Zack?
It’s at this point that we need to remember that, while Zack was never as close to Sephiroth as Angeal and Genesis once were, they were friends. And Zack Fair does not give up on people, you have to literally take the decision out of his hands.
Looking at you Angeal.
Obviously, Sephiroth has been around as a spirit entity - which is also the position Zack and Aerith have been in. Sephiroth, who is just a shadow of himself made of malice and anger, twisted from the man Zack once knew. But that doesn’t mean Zack wants to write him off.
I absolutely believe that in ACC, Zack spent his time trying to talk Sephiroth down. That may even be what compromised Kadaj’s ability to sense that Rufus had Jenova’s remains in a box under a blanket all that time. Cloud, he knew, had plenty of support. But Sephiroth? Sephiroth was the Nightmare, son of the Calamity, Jenova’s favorite son, and he had no one but Zack left.
Sephiroth toys with Cloud. Is it malice or distraction? Likely both. Sephiroth has years of experience over Cloud - many of which were on the warfront, but also fighting the likes of Genesis and Angeal - in addition to formal training in combat and strategy. There is no reason Cloud should win if Sephiroth had his mind together. Blame Jenova, blame his breakdown, blame the fact that he has no frame of reference of how to handle all that emotion - here, even, blame Zack.
For most of the fight, Zack isn’t there. Then, when Sephiroth is going for the kill, Zack pulls Cloud into the realm of “other” that Aerith had done before. And with tears in his eyes where Cloud can’t see them, he asks if he needs help to take him down.
At the time, he has the Buster Sword resting on his shoulder. But this isn’t something he conjured from his mind, in the condition he last held it. This isn’t even something one would picture Cloud imagining - not that he’s facing Zack to see him, anyway. This is the same sword that Cloud left on the cliff. The same sword that is mysteriously polished and placed in Aerith’s church at the end of the movie.
Zack, as much as the thought pained him, was ready to fight Sephiroth one more time. He was ready to step out of his place in the Lifestream, having gone to get the blade his mentor had given him, that he had given Cloud, and take up the fight.
Like the last fight of his life, there are tears in his eyes because for all his efforts, Zack wasn’t able to save Sephiroth. Cloud may never know the kindness he did his friend to spare him the pain of having to help put him down again, but at the end of the pep talk Zack gives him, there’s a smile on his face.
This doesn’t have to be his fight, and Cloud is strong enough to make it on his own. Zack has lost one more friend for good, it’s a bittersweet victory. But he does meet him one last time in the church. He doesn’t say anything, his wave is slow, a little uncoordinated - I imagine it was one hell of an effort to get the strength to be ready to do what he did, Zack doesn’t have the heritage to give him any advantage there, it’s pure will driving him then. But that’s not really a new thing for Zack.
... so yeah, THAT is what I headcanon as happening regarding Zack during ACC.