Veer-Zaara raconte l’histoire de Veer Pratap Singh (Shahrukh Khan), un Indien emprisonné au Pakistan. Une jeune avocate, Saamiya Siddiqui (Rani Mukerji), fille d'un militant des droits de l'homme, prend son cas en main et cherche à comprendre ce qu'il s'est passé. D'abord réticent, Veer se livre peu à peu et raconte son histoire et sa rencontre avec Zaara Hayat Khan (Preity Zinta), une Pakistanaise qu'il secoure lors d'un grave accident. Séduit par son charme et touché par sa détresse, Veer aide Zaara venue en Inde pour accomplir les dernières volontés de sa nourrice, disperser ses cendres sur sa terre natale.
Après l'avoir présentée à sa famille, alors qu'il la reconduit au Pakistan et s'apprête à lui avouer ses sentiments, Veer apprend l'existence et fait la connaissance de Raza Sharazi, le fiancé de Zaara. De retour dans sa famille pour célébrer son mariage, Zaara prend conscience de son amour pour Veer dont l'image la poursuit, et sombre dans le désespoir. Veer accourt pour la chercher, mais les deux jeunes gens, conscients des ravages que provoquent leur amour, décident d'y renoncer. Cependant, Raza Sharazi, humilié par l'exposition à la vue de tous de l'amour de sa fiancée pour un autre homme, use secrètement de son influence pour accuser Veer d'espionnage et le faire emprisonner.
C'est dans cette triste situation que Saamiya Siddiqui le trouve 22 ans plus tard et qu'elle entreprend de faire éclater la vérité malgré la réticence du gouvernement pakistanais, l'opposition d'un procureur particulièrement retord et le silence de Veer, soucieux de protéger la réputation de la femme qu'il n'a jamais cessé d'aimer.