There should be nothing wrong with building your own entry point as opposed to using console_scripts - it’s really just a convenience that it exists, not a requirement. Apps with more advanced needs such as yours deserve to have their own executable, and distributing them in the project.1.0.data/scripts directory should be supported.
I’m not 100% clear what warning you’re getting, or what UV and pipx are choosing not to do, but if you’re bundling an executable that does the right thing in the right part of your wheel then I’d push the issue back to them.
As for those two things you need, the manifest is particular is going to ensure that long paths (>260 chars) are enabled (if the OS has it enabled, which I still hope will be the default one day). I suspect that’ll be pretty important to you, and there’s no way to do it other than the manifest.
The legacy stdio can be emulated closely enough by overriding sys.std* at startup, something like this (please validate thoroughly, you’ll have better coverage than I do). I’m 99% sure there’s nothing else that flag does, though it’s been a long while since I thought about it. Note that mbcs is only a best guess - I’m not sure we have an API anymore that’s reliably defined as “get the console encoding”, since the idea is to use the Unicode APIs.
import io
import sys
sys.stdin = io.TextIOWrapper(io.FileIO(sys.stdin.fileno(), closefd=False), encoding="mbcs")
sys.stdout = io.TextIOWrapper(io.FileIO(sys.stdout.fileno(), "wb", closefd=False), encoding="mbcs", errors="replace")
sys.stderr = io.TextIOWrapper(io.FileIO(sys.stderr.fileno(), "wb", closefd=False), encoding="mbcs", errors="replace")
# Don't replace sys.__std*__, or if you do, stash them somewhere so they don't deallocate and close the streams