You're correct in that code needs to be written in a specific way to benefit from having multiple cores/processors. It's sometimes non-trivial to develop a parallel version of an algorithm that actually benefits from multiple cores, so it might be hard to get meaningful speedups in an algorithm you've developed yourself. That said, there are definitely packages around that have parallel versions of some machine learning algorithms.
Another use-case, which makes a lot of sense for machine learning applications, is to run multiple copies of single-core-friendly code. For example, if you're doing 10-fold cross validation, you could farm each fold out to a separate core and get the results (roughly) 10x as fast. Similarly, if you're doing a search for some parameters, you could run several copies, each starting from different locations, and then compare the results later.
This can be done by hand (just start 10 copies of the program), but a lot of packages (including WEKA, R, and Matlab) have some infrastructure to make it easier.
For WEKA, this thread has some suggestions, but the gist is that you can have one RemoteEngine client running per core and then assign the work that way. The GUI has some built-in multicore support too.
R has several options (see this StackOverflow thread and links therein). I haven't played with much personally, but I know a few people who are very happy with Revolutions.
Some Matlab functions have built-in support for multicore/multiprocessors (you'll have to look at the docs; it's a little bit random so far). The Parallel Computing toolbox has some nifty functionality whereby you can make a for-loop run in parallel. You basically do something like
matlabpool open;
result = nan(N,1);
parfor ii = 1:N
result(ii) = some_function(ii);
end
This automatically distributes calls to some_function across cores and collects the results for you. There are---of course---some caveats, but it's pretty close to that simple, and it gracefully degrades to running sequentially if run on a computer without the toolbox. I suspect that you could do something similar with the right packages in R, but I'm not sure.