"can we at least make external code communicate with QuakeC code or UnrealScript?"
You can with UnrealScript. There is a TCP/IP networking package called 'IpDrv' that allows you to create network connections that could be used to transfer movement commands and other bot input from an external application to the bot UnrealScript code in the game. This external app could be running on the server, or it could be running on some external client that has been configured to connect to the host running the game (security might be an issue here, also network bandwidth needed to constantly send commands back and forth could be an issue). Even with an external C++ application controlling the bots in UT2k3/2k4, there is no way to get polygon geometry information from the engine. The Unreal "compiled" map format isn't publicly available and the only information you can get at run-time through Unreal Script is Traceline() info (determining where a line or box collided with the world when ray tracing from one point to another point). Can you imagine the overhead needed to send commands and results back and forth over a network to do a dozen or so tracelines per bot per frame?
I'm not sure what Quake III has to offer as far as external network connections. Somebody would have to do some research on this.
I know that UnrealScript doesn't have any other mechanism for sending data back and forth between processes on the same machine (like shared memory), unless you want to start hacking the engine executable to make something like this possible (i.e. hacked DLLs and whatnot), which I doubt anyone here wants to go that route.
botman