On Windows, InnoSetup along with option 2 - installing to program folder - would in my opinion be the best solution. Especially with different OpenSSL versions out there, using one from the system directory might not be a good idea. And if your code is statically dynamically linking OpenSSL, it won't run without them. Microsofts own MSI is required if you want to distribute through the Microsoft Store.
On MacOS, you can create .pkg installers using XCodes productbuild command line tool, and would place the libraries within the app bundle. But I would prefer using NSURLDelegate there to be independent of OpenSSL/LibreSSL versions of the OS.
On Linux, this depends a lot on your packaging. For .deb and .rpm, you could specify dependencies. If you want to ship them, take a look at AppImage.
Downloading libraries in my opinion has the advantage of staying up to date, but the disadvantage of having to implement a lot of validity checking, and having permissions to write to the app folder, which is not very user friendly.
So, to sum it up - distribution is quite different on each platform.