Is it possible to make block production difficulty not the same for every node, but automatically adjusting to the node's hardware speed? For example, node A and node B are both trying to solve for their next blocks, node A's hardware speed is twice that of B's. Their client software detect their hardware speeds and adjust the difficulty in such a way that B's next block's difficulty is only half that of A's. Is this possible?
No, difficulty is a network-wide consensus rule. POW mining helps solve the issue of sybil attacks, whereas your idea opens up mining to sybil attacks:
Your idea would create a level playing field for all devices (regardless of computing power), so if I want to expand my mining operation, I would just want to run thousands of mining nodes. Hardware doesn't matter, so I could just use cheap computers, or better yet, a botnet. The more nodes I can make, the better!
Additionally, how can you be sure nodes aren't lying about the hashrate available to them? How can you be sure a user hasn't rewritten the source code of their client to artificially lower the difficulty? Etc.