If you build 2 ports, is that a pair-a-docks?
Other add-on packages you've installed will need to be updated in the same way you originally installed them; by installing a newer version package, or building a newer version port. The ports tree itself is also kept in CVS just like the source tree, so you can update it through CVS or CVSup just like the source tree. Also, look into the portupgrade utility, which is a suite of scripts written in Ruby to make it easier to upgrade already installed ports.
The ports tree is basically a huge skeleton. Each individual package has its own directory, which contains a number of files. Each has a Makefile, which defines some variables relating to that package, like where the master site for the distribution is, version numbers, special instructions for autoconf, and a listing of other packages that this depends on (Mozilla, for instance, requires the X libraries, among a zillion other things). It'll have a few files containing things like a one-paragraph description of the package, a packing list for the files that it'll install, and so on. And it may include any patches that might be necessary for the software to compile or run. That's the "porting" part of the ports tree; the porting is already done.
There's all sorts of magic inside a giant web of very complex Makefiles. Fortunately, you don't need to know any of it. All you need to know is that if you run make, it will automatically fetch the source from whatever the master site for that package is, automatically patch it, automatically configure it with whatever magic is necessary, and automatically compile it. And if it requires other packages, it will automatically check to see if they're installed, and if they're not, it will automatically recurse down and compile and install those, too. Then when you run make install, it will automatically install it, and automatically register it as a package so you can upgrade or deinstall it with package tools later.
It's fiendishly complex in detail, but remarkably simple to use.
Or, you can use binary packages. Here, you'll primarily use the pkg_add command. And if you use it with the -r switch, it will automatically try to fetch the requested package and its dependencies from the FreeBSD mirror sites.
Lots more information on the whole process is available, as always, in the handbook; specifically, the ports and packages chapter.
That's not too hard either. But boy, that sure is a lot of information on the technical side. Let's move away from those sort of details, and get to the differences in underlying philosophy.