If you plan on using the standard tor implementation, then yes you will need to use some form of local proxy. If you don't want to bind the SOCKS port to a localhost address, you can also use a unix domain socket instead. For example using SocksPort unix:/home/user/tor-socks.unix.
If you want to avoid using a local proxy, then you will need to build the Tor ...
The tor.service is normally run as a non-privileged process (i.e. the process' owner's UID is not 0). This is true unless (as is the case here) the flag DisableAllSwap is set to 1 (default is 0) in which case the process must be started as root (see service unit file) and later passed on to user tor (see file etc/tor/torrc).
No matter, for both ...
The relevant error is Failed to bind one of the listener ports. You already have something running which is bound to one of the ports you've set Tor to use (probably one of 9050, 9051, 9040, or 53). You might find this helpful: https://www.cyberciti.biz/faq/unix-linux-check-if-port-is-in-use-command/
As per changelog, Tor, starting with 0.4.6, no longer publishes any DirPort:
Removed features (relay):
Because DirPorts are only used on authorities, relays no longer advertise them. Similarly, self-testing for DirPorts has been
disabled, since an unreachable DirPort is no reason for a relay not to
advertise itself. (Configuring a DirPort will still work, ...