This question raises several issues. The bounty will go to an answer which addresses them holistically.
Here\'s a problem I\'ve been playing with.
What I would try.
Cover trees as the base data structure for doing kNN. Features: doesn't need a Euclidean metric, linear space usage, kNN/Insert/Remove are all O(log n) when the intrinsic dimensionality of the data is fixed. Non-feature: motion.
To handle moving objects, periodically, for each object, remove its old position, insert its new position, and find the kNN.
If we set the period of an object inversely proportional to speed, then we know that the maximum discrepancy between the cover tree and reality is bounded by a constant.