The last argument, despite its type, is a user-space pointer. It then calls the open method for the newly allocated file structure. I think it's done the way it is because it makes filesystems simpler to implement. This describes how a filesystem can overload the standard dentry operations. Dentries and the dcache are the domain of the VFS and the individual filesystem implementations.
Device drivers have no business here.
Child dentries are basically like files in a directory. Putting the dentry on the unused list just means that if the system needs some RAM, it goes through the unused list of dentries and deallocates them.