Future methods were a very early async mechanism and as such are less capable than Batchables, Queueables and Schedulables.
In terms of the reason stated by Salesforce for not supporting SObjects and similar, as per the documentation you have quoted, I personally view this as likely not the real rationale.
Back when future methods were introduced, I suspect this limitation was more to ensure that the state for the future method call that had to be stored in the database (the serialized form of the parameter data) was kept small, so as to not take up too much database storage.
That this doesn't apply to Queueables is, in my opinion, simply because time has moved on and Salesforce are happier to store more data in the async state tables within the platform.
As per the documentation, queueables allow complex parameters and state:
Using non-primitive types: Your queueable class can contain member variables of non-primitive data types, such as sObjects or custom Apex types. Those objects can be accessed when the job executes.
NB: There are certain limitations on what can be used as state for your queueable object's state; if the type you want to use does not support JSON serialisation, you cannot use it as non-volatile properties in your queueable. This applies to certain Salesforce API objects.
So, in answer to your question (and as commented by @DerekF) this is the way it is "because Salesforce says so". But you can read between the lines and conclude it is likely because the platform infrastructure has improved and they are better able to support more data-hungry async processes.