You could of course have the same advantages _much_ simpler...
... by using static linking. That way you get a single binary you can just drop into a directory and execute.
There are reasons for dynamic linking, and that is that you can easily fix bugs in libraries, by just updating the binaries. So if you find a bug in libpng, you can just recompile it, and all your programs will use that fixed version automatically. If you ship libraries with your code, you loose that advantage and experience shows that you'll likely have old outdated versions of your libraries.
Static linking has the advantage of being nice and simple. There's just one file you need to take care off and nothing else. Having such a container achieves the same without the simplicity part. You attempt to somehow cram your program and its libraries into one package, and have that in some sort of jail. This is harder to do than static linking, yet brings no advantages.