You are mixing the proxy and virtual hosting. You only want externally port 80 for inbound and use server name to route to the virtualhost instance. You want all proxy configs IN the virtual host. You don't need to proxy wordpress because it runs
in apache. The first config is default. I usually put a VH that returns 404 for the first one, because no one should use the ip or a name you don't know about but that can be done later.
Each virtualhost stands alone, the proxy directive (even if repeated) should only be in each virtualhost. Define separate log files for each virtualhost (access/error) so you know which one is being accessed.
So the first virtualhost which in your config is django. It looks like your want port 80 to 80, I would unbind localhost from apache and that way you can use
http://localhost:80
<VirtualHost *:80>
ServerName abc.com
Your Django config, proxy forward to localhost 80.
</VirtualHost>
<VirtualHost *:80>
Servername xyz.com
wordpress config (you don't need to proxy it, it is "native" apache.
</VirtualHost>
<VirtualHost *:80>
Servername efg.com
PROXY STUFF For nodejs forward port 8080 ( you can use localhost 8080 if you redo the bind)
</VirtualHost>
BTW, I haven't used proxy directives for a long time, but I have had a apache server with multiple sites AND a proxy so I know it can be done...