Programming without pointers is essentially programming without run-time identities used in aliasing; i.e. programming with values. You can program with values, make it a unique ID or include one, copy that around, and you are essentially back to programming with pointers again (this happens in functional languages a lot, but they don't like to talk about it).
OO languages like to think of everything as an object, FP languages like to think of everything as a value, but in reality you often need both in most applications, and an extreme bias one way or the other isn't useful.
OO languages like to think of everything as an object, FP languages like to think of everything as a value, but in reality you often need both in most applications, and an extreme bias one way or the other isn't useful.