It is possible to use .so files with Arduino IDE 1.8.6 and newer. The Arduino library must have a library.properties file which contains the line:
precompiled=true
More information is provided in the relevant section of the Arduino Library Specification:
precompiled - (available from Arduino IDE 1.8.6/arduino-builder 1.4.0) (optional)
set to true to allow the use of .a (archive) and .so (shared object) files. The .a/.so file must be located at src/{build.mcu} where {build.mcu} is the architecture name of the target the file was compiled for. Ex: cortex-m3 for the Arduino DUE. The static library should be linked as an ldflag.
There is also documentation for the ldflags field of library.properties in the specification:
ldflags - (available from Arduino IDE 1.8.6/arduino-builder 1.4.0) (optional)
the linker flags to be added. Ex: ldflags=-lm
I believe some platform.txt changes have been required in order to support the new ldflags feature and that change has not been made in all hardware packages yet. You can get some information on that here (and in the pages lined from that link):