Both of these would be a customizatons that would require a developer.
As for the assignment by category, that too would be a modification to aspdnsf_GetCustomersRelatedProducts. I'm assuming you'd want to enter category ids instead of product ids for the related products in the product editor. Then in the aspdnsf_GetCustomersRelatedProducts stored procedure you'd need to get the products assigned to the category and use those for the related products. This wouldn't be as difficult as the paging. It would just be a few lines of SQL right before queries that pull the related products. Something like:
--Temp table for fixed related categories
declare @RelatedCategories VARCHAR(8000)
select @RelatedCategories = replace(cast(relatedproducts as varchar(8000)), ' ', '') from dbo.product with (NOLOCK) where productid = @productid
DECLARE @RelatedCategoriesTable table (CategoryID int not null)
insert into @RelatedCategoriesTable select distinct * from dbo.Split(@RelatedCategories, ',')
--Temp table for fixed related products
-- Don't use the following query because we're using category ids not product ids
--select @relatedprods = replace(cast(relatedproducts as varchar(8000)), ' ', '') from dbo.product with (NOLOCK) where productid = @productid
DECLARE @RelatedProductsTable table (ProductId int not null)
insert into @RelatedProductsTable select distinct productid from productcategory where categoryid in (select categoryid from @RelatedCategoriesTable)
Note that in the product editor you won't be able to use the related products helper, as it is tied to products. You'll have to enter the category ids manually.