As I said bitcoin days destroyed would have to be a part of the function. So that transactions of money that just been transacted recently would weigh a lot less. Only when the last transaction of the money was older than some barrier would the transaction weigh in 100% on the total velocity. The time barrier could be set to something like 3 hours, but it would be better to set it dynamically based on the last total velocity. I know the number would not be completely precise, but I think it would still be more so than the velocity when calculated in the real world.
Also a single dude cheating would mean less and less, as more and more people get a hold of money.