I understand what you’re aiming for - giving preference to items with a “featured” status and backfilling when you don’t meet a given number (in this case 12). Unfortunately since you can’t order by status, in a single entries loop you can’t even put only “featured” items at the top of a single entries loop - at least not natively.
Instead, I might suggest “cheating” a bit by creating a custom field to act as a status. Then you could use that custom field as your orderby parameter and have a single limit parameter of “12” set. So for example, you might have a custom field called “cf_book_status” that is a mandatory radio button with two options: featured and regular (as examples). Then your entries loop you would have:
{exp:channel:entries channel="book" orderby="cf_book_status" sort="asc" disable="member_data|pagination" limit="12" dynamic="no"}
{your entry data here}
{/exp:channel:entries}
Because “f” comes before “r”, your order would put featured above regular “status” books. And no matter how many entries there are with one “status” versus the other, you would always then have 12, with regular entries filling the gap if you have fewer than 12 set to “featured”.
The downside to this approach, however, is that it does not allow you to randomize the entries. If you need a combination of 12 entries of both statuses, with preference given to featured and backfilling of the entries in a single loop, i suspect you’d need a query for that - and that’s not my area.
Hope this helps a little at least.