It's possible that you don't roll your own custom trees and other data types because your language of choice doesn't make using your own data structures easy.
"I've encountered no occasion where I'd implement CS classics like linked lists and binary trees. My understanding goes as far as sort of vaguely recognising them."
My languages of choice do make creating custom data structures at least as easy as Haskell, and I still rarely do it.
In most cases I've found it's faster in implementation time, testing time, and running time to just use built in data structures when possible. Even in Haskell.