With lazarus you usually use a virtual machine for Linux or Windows (depends what your main OS is). OsX needs a mac though.
But cross compiling (not sure if CT does target OsX) does not guarantee the app will run. The basics will all work across platforms (Lazarus or CT, since it is the same code). But if you write a bigger app, then with either of the 2, you need to test that app on the final system. So you do need each OS that you want to run your app under.
Hence you can install Lazarus on each OS.
Then you can just copy the project (use a revision mgmt system, like svn/git/...) and compile it.
Another factor is: CT releases are based on Lazarus trunk (trunk is untested new features). I have no idea to what extend CT does there own tests.
On the other hand, if you need latest edge, (maybe for cocoa, which afaik currently is better in trunk) then you can check if CT happens to be based on a newer revision than the current Lazarus release (bit tricky, since you need to compare 2 svn branches).
But then you could always use released Lazarus, and only for cocoa use a self build trunk based. It is easy to do. Once you have a released install, its a few steps to create a 2nd Lazarus from trunk).
And even if the CT is more up to date than Lazarus release, it will also be a snapshot. And trunk advances every day. Even CT does not follow at that rate. And Lazarus has the option to go svn.