US President Barack Obama vetoed a $612 billion defense spending bill, saying it resorted to budget "gimmicks," wastes money on unwanted programs and prevents the closure of Guantanamo Bay prison.