I don’t work at Github so I’m not as familiar with Atom as they are and I would never call myself an expert, so take the following with a grain of salt, but I’ll try to explain it to the best of my knowledge.
It’s a bit more than just packaging. The lion share of the code can run on all platforms, but a small percentage is platform dependent. Some of the node.js modules Atom uses are written in C++ (some are even bindings to Objective-C code from Cocoa which is only available on OSX), so they have to be written with the platform and libraries available on that platform in mind. The spell-checking module for example uses the native NSSpellChecker on OSX and the Hunspell library on Windows and Linux.
In quite a lot of places, the Atom core already has if…else constructs in place that make Atom do different things if Atom is running on OSX or Windows, but I’ve seen a few places were it seems to be missing and it looks like there is even more missing when it comes to Linux, but that might just be because Windows and OSX are much more different than Linux and OSX are, I’ve only given the code a cursory glance so far. If you want to check these cases in Atom out, look for lines with process.platform in the .js files.
And then there’s of course always bugs. Even though Chromium does try to make everything work the same on all platforms for the most part, there do tend to be bugs now and then were something doesn’t work on one platform as it should (or doesn’t work at all), so you still have to try everything out on all platforms to verify that it works right and that takes time, especially if you have to write workarounds for these problems until they get fixed upstream. It’s not nearly as much work as having to support multiple web browsers in a web app, but still, it means that you can’t just assume it’ll work everywhere.