1) Develop your app as usual, but keep all your resources inside a single folder, change the working directory to this folder before you load anything. Don't use subfolders.
2) When you're ready to make a release build, ZIP this folder file and mount it like in the Quake3 map tutorial. Rename the .zip to .dat or something, just for effect.
3) Edit IrrCompileConfig.h and get rid of all the stuff you don't need, specially the D3D drivers. The more you remove, the smaller the library will be.
4) Build Irrlicht as a static library in release mode using gcc. You've now got a static library that doesn't have any external dependencies, no D3D dependency, no MSVC redistributable dependency. It will take longer than usual to build this binary, so I don't recommend doing this during development.
5) Recompile your app in release mode with Irrlicht as a static library. You need to either edit IrrCompileConfig.h or add the IRR_STATIC_LIB define to each of your sources that includes irrlicht.h.
You now have your exe plus a single .dat file. You can distribute these together and they'll work on any machine as long as the .dat file is in the same dir as the exe.
For bonus points:
6) Write a program to convert the ZIP (or TAR) file into a string literal in a .cpp source file, then compile this source file into your app. Create a MemoryReadFile from it, and hack Irrlicht to mount the zip file.
7) Compress your exe with UPX, reducing the size by 50 to 80%!
If you did all of the above, you have a single executable file that is as small as possible and will run on any machine!
For Linux: same as above.
For OSX: put your resources inside the app's resource directory instead, and change directory there before loading anything.