Murphy "Barfi" Johnson (Ranbir Kapoor) is an optimistic, street-wise, charming young man who was born deaf-mute to a Nepali couple in Darjeeling. His mother died when he was a baby and his father raised him alone, while working as a chauffeur. Barfi is known as a troublemaker – he cuts lampposts, plays practical jokes on innocent people, and is chased by Sudhanshu Dutta (Saurabh Shukla), a local police officer. Barfi meets Shruti Ghosh (Ileana D'Cruz), who has just arrived in Darjeeling; she is engaged to Ranjit Sengupta (Jisshu Sengupta), and is due to get married in three months, and Barfi is immediately smitten with Shruti. She also falls in love with Barfi but her mother dissuades her from pursuing him because he could not take care of her with his disabilities and lack of money. Shruti takes her mother's advice, gets married, and moves to Kolkata, breaking all contact with Barfi.
Meanwhile, Barfi's father falls ill and Barfi must somehow raise the money for his treatment. After an unsuccessful attempt to rob a local bank, he tries to kidnap Jhilmil Chatterjee (Priyanka Chopra) – Barfi's autistic childhood friend and wealthy heiress of her grandfather's fortune – for a ransom. Upon arriving, Barfi finds she has already been kidnapped. He sees her in a van, sneaks inside and drives Jhilmil away from the ransom delivery. He hides her in his apartment with the police in pursuit. Barfi collects the ransom, but finds that his father has died just as he makes the payment. Dejected, Barfi tries to leave Jhilmil at the village of her caretaker, but she refuses to leave him and they soon move to Kolkata, where Barfi assumes responsibility for Jhilmil and takes care of her.
Six years later, Barfi and Shruti meet by chance. Shruti is unhappy with her marriage and she and Barfi rekindle their friendship, much to the chagrin of the lovestruck Jhilmil, who then goes missing. Shruti files a missing person report for Jhilmil. The Darjeeling police learn about the report, resume their pursuit of Barfi and arrest him. As he is being interrogated, another ransom demand for Jhilmil is made and she is apparently killed in the process of the exchange, though her body is never found. In order to conclude the case, the police try to frame Barfi for Jhilmil's murder. Policeman Sudhanshu Dutta, who grew fond of Barfi after investigating him for his nuisances, asks Shruti to take him away, offering him a second chance at life. She agrees and hopes that now Jhilmil is gone, she can finally be with Barfi.
Barfi is deeply affected by Jhilmil's loss and finds living with Shruti unfulfilling. He finds the location of Jhilmil's childhood home and takes Shruti to look for her. They find that Jhilmil is still alive, and that both kidnappings were fabricated by her father so he could embezzle money from Jhilmil's trust fund. In the second attempt, second time, they faked her death so that she could return to her special-care home, away from her alcoholic mother. Barfi has a happy reunion with Jhilmil and the two are married, while Shruti spends the rest of her days alone, regretting the loss of her chance to be with Barfi.
Several years later, Barfi is shown to be gravely ill in a hospital and is close to death. Jhilmil arrives and lies with Barfi in his hospital bed as Shruti narrates that the two died peacefully together, not wanting to leave each other behind in life or death. The film closes showing the happy days of Barfi and Jhilmil as credits roll.