The reason why Salesforce objects cannot be passed as arguments to future methods is that the object can change between the time you call the method and the time it actually executes. Because future methods are executed when system resources become available. In this case, the future method will get the old sObject values and might overwrite them.