I hear you. Arel was always a leaky abstraction of Rails. It was a public gem, indeed, but it was never part of the public API of the framework. At the time it was introduced into the framework years ago it was not meant to be used in user applications, but, because the abstraction was leaky it worked in a few methods.
Its API never had a proper API review and it was always inconsistent where passing an Arel AST as argument worked inside Active Record. Across many patch level releases it was not rare to break by mistake a method that used to work when passing an Arel AST, and knowing those methods upfront is impossible.
This is why for years we (the Rails Core team) consider Arel private API of the framework and we don’t recommend developers to use. Of course they can use it, given the abstraction is so leaky. Because we considered Arel as private API, we continued to change APIs without taking in consideration backward compatibility and that only caused more problems in applications, just increasing the frustration of the users every time those backward incompatible changes happened.
The reason we merged Arel inside Active Record was to try to fix this situation. We want to expose Arel with a consistent, reviewed, tested and well defined low level API so people can use in their applications. But so far we didn’t make much progress on it. Most of the members of the core team don’t have applications where Arel is being used directly, and we all have different priorities, so we didn’t have yet the motivation to start this work.
This is where a motivated contributor can help. If you use Arel in your applications and want to help us doing the work to define the public API of Arel, I would be happy to provide guidance and support to help you to implement it.