While asset blacklists are stored client-side, the list of blocked UUIDs is stored server-side, tied to the account and persists across viewer installs. This could be leveraged via script functions to create items that respect block lists and cannot be used by blocked users.
As a security measure, a new permission (for the sake of argument, PERMISSION_READ_BLOCKLIST) could be implemented. This permission would not be automatically granted upon sit/attach, but may persist across sessions until the object is detached or permission is revoked by other means.
In addition to this, there would be a couple of new functions for accessing the list:
integer llCheckUserBlocked(key uuid);
Returns a boolean based on whether the uuid is blocked by the wearer or not.
integer llCheckOwnerBlocked(key uuid);
Returns a boolean based on whether the uuid is blocked by the owner or not.
list llGetUserBlockList();
Returns a list of the wearer's entire blocklist.
list llGetOwnerBlockList();
Returns a list of the owner's entire blocklist.
If getting the entire blocklist may result in stack/heap collisions, it might be desirable instead to use a notecard-alike set of dataserver functions to iterate through the blocklist instead.