I've created a solution with three projects inside. One of the projects is named Controller and uses Appium.WebDriver, which requires Selenium version 3.141. The second project is named Runner and uses Selenium version 4.11 while also having a dependency on Controller. The third project contains some tests and has a dependency on Runner.
The problem is that when I execute the tests, the project fails because the methods from Controller are executed with Selenium 4.11, but they should be executed with a version of Selenium compatible with Appium (3.141). Some features from 4.11 are also required so I can't use 3.141 in Runner.
I've tried to use PrivateAssets and ExcludingAssets, but I don't have any experience with this topic, so my attempts were unsuccessful.

An application can only have a single version of a library loaded. This is a fundamental limitation of .net.
So your options are:
The issues with library versioning are well known, and I think John Skeet summarizes the issues fairly well. He also proposes some possible solutions. But as far as I know the problem has not been addressed by the development team one way or another.