I think the ABI provides the necessary infrastructure to have a stack and to make function calls. It allows for device side linking and is probably also necessary to do device side memory allocations on the heap.
Without ABI your kernel had to inline all function calls.
I guess they cut it because it the feature became difficulty to maintain in the long term.
Device-side printf() and dynamic parallelism require the ABI as well, as do various C++ features.
ABIs are a good thing. In the best of all worlds CUDA would have used an ABI right off the bat, but (at least as I recall), sm_1x hardware was too primitive to support an ABI.