I tested my suggestion and it works here. Only problematic scenario is the same source port for same destination address and port. In more detail:
Works:
Device 1: 192.168.0.2:12345 -> 1.2.3.4:80
Device 2: 192.168.0.2:54321 -> 1.2.3.4:80
Also works:
Device 1: 192.168.0.2:12345 -> 1.2.3.4:80
Device 2: 192.168.0.2:12345 -> 4.3.2.1:80
Does not work (but it's "first come, first served", already established connection does not break):
Device 1: 192.168.0.2:12345 -> 1.2.3.4:80
Device 2: 192.168.0.2:12345 -> 1.2.3.4:80
Whole config:
/ip address
add address=192.168.1.2/24 interface=ether1 network=192.168.1.0
add address=192.168.1.11/24 interface=ether1 network=192.168.1.0
add address=192.168.1.12/24 interface=ether1 network=192.168.1.0
add address=192.168.0.1 interface=ether2 network=192.168.0.1
add address=192.168.0.1 interface=ether3 network=192.168.0.1
/ip firewall mangle
add action=mark-connection chain=prerouting dst-address=192.168.1.11 new-connection-mark=port1 passthrough=yes
add action=mark-connection chain=prerouting dst-address=192.168.1.12 new-connection-mark=port2 passthrough=yes
add action=mark-connection chain=prerouting connection-state=new in-interface=ether2 new-connection-mark=port1 passthrough=yes
add action=mark-connection chain=prerouting connection-state=new in-interface=ether3 new-connection-mark=port2 passthrough=yes
add action=mark-routing chain=prerouting connection-mark=port1 new-routing-mark=port1 passthrough=no
add action=mark-routing chain=prerouting connection-mark=port2 new-routing-mark=port2 passthrough=no
/ip firewall nat
add action=dst-nat chain=dstnat dst-address=192.168.1.11 dst-port=80 protocol=tcp to-addresses=192.168.0.2
add action=dst-nat chain=dstnat dst-address=192.168.1.12 dst-port=80 protocol=tcp to-addresses=192.168.0.2
add action=masquerade chain=srcnat out-interface=ether2
add action=masquerade chain=srcnat out-interface=ether3
add action=src-nat chain=srcnat connection-mark=port1 out-interface=ether1 to-addresses=192.168.1.11
add action=src-nat chain=srcnat connection-mark=port2 out-interface=ether1 to-addresses=192.168.1.12
/ip route
add gateway=192.168.1.1
add distance=1 dst-address=192.168.0.0/24 gateway=ether2 routing-mark=port1
add distance=1 dst-address=192.168.0.0/24 gateway=ether3 routing-mark=port2
It's the variant where this router only connects devices to LAN (192.168.1.0/24) and internet gateway is another router (192.168.1.1). The other one, where the same router would be connected directly to internet, would differ only in added srcnat rules, where it would be just a common one.