The plane left Darwin about 7.00am (ACST) Thursday and had been in the air for about an hour when a male passenger began yelling at flight attendants.
Passengers Kirsten and Claudia Lloyd say the crew hand-cuffed the man and took him to the back of the aircraft.
"It kind of started over a sandwich, I think," one said.
"Yeah, $10 for a sandwich, I think it was.
"Then he got all hyped up and started pushing all the flight attendants down the aisle."
A Virgin Australia spokeswoman says the captain decided to return to Darwin because of the passenger's "disruptive" behaviour.
Australian Federal Police say the man has been taken to Royal Darwin Hospital due to concerns about his mental health.
The flight was further delayed by police inquiries.
Most passengers have been transferred to other services and the last of them were expected to arrive in Perth late on Thursday night.