OK, to explain this one, it's time for a little lesson in network sockets.
Most computers have only one network interface, maybe two or three for those with AirPort, Ethernet, and a modem, and even then they generally only use one at a time. However, it's obvious that people need to be able to make multiple connections at once; otherwise, you couldn't use a Web server or any other network stuff, or you wouldn't be able to check e-mail or instant messages while surfing the Web. So how is this possible?
Unix (or, to be more accurate, TCP/IP), solved this problem by creating a concept called sockets. Each socket represents one connection. Every network packet which goes on your machine is tagged with the socket it's meant for. That way, even though there's only one stream of data going into your machine, it can carry many connections, and they won't get in each other's way.
Now, each machine has a whole lot of sockets: 65,535 of them to be exact. Each interface (whether it's an Ethernet card, AirPort card, modem, or whatever) has its own set of sockets, and each socket has its own number. And the machine itself has yet another set which doesn't use the network; applications can use these to talk with each other. Sockets which use the network are also called "ports"; you might have heard that term before. But anyway, when a server starts up, it "opens" one of these ports and "listens"; that is, it waits for people to connect to it. Normally, these numbers are well-defined; the Web uses Port 80, for example, while FTP uses Port 21.
Now, there's one catch: by convention, only root can open sockets with numbers less than 1024. This was done so that there would be a set of "trusted" sockets; when you connect to one of these on another machine, you know it should be safe, because only that machine's root user could have opened that socket. It's a security issue, basically. Not much of one, but every little bit helps.
Remember what I said about the Web using Port 80? Well, that's why you can't run Apache except as root. Apache wants to use that port, but only root can open it. When you run as anyone else, it can't open the port, so it fails. Web Sharing doesn't actually gets around this restriction; it uses sudo (or something along the same principles) to get Apache to run. By the way, it's important to note that Apache does not run as root all the time; it stays as root only long enough to open that port, and then it switches to another, less dangerous user (usually "www").
How can you work with this? Well, there are a couple of ways. First, use sudo to run Apache (and disable that root account while you're at it). If you don't want to do that, then configure Apache to use a high-numbered port (it's customary to use port 8000 or 8080 if you want to do this but any port from 1025 on up will work).
By the way, what are you using to run Apache from the Terminal? You should be using the apachectl command. Just checking to make sure.