This is by intent. I never liked how returning false in a filter stops the execution. There are too many side effects, like @stuff = Model.something_returning_false, that accidentally halts the callback chain. In AJ, we're instead going for the explicit approach that requires you to raise an exception, if you want to stop execution. We'll be changing callbacks elsewhere to move away from the "false means halt" in Rails 5.0.
before_* is indeed intended to be the same as writing your code before execution, but in such a way that it can be abstracted and mixed in. So you can write before_* callbacks in super classes without having the child need to call super, or in modules that you mix in.