The special thing about RoutedCommand is it's built in use of Command Manager ,
For instance :
1) CommandManager.RequerySuggested to raise ICommand.CanExecuteChanged.
2) CommandManager.RegisterClassCommandBindings in order to associate a command with a Execute and CanExecute delegates of instances of specific types.
These built in solutions come with a small performance cost , as discussed here
A discussion about the fact that CommandManager's RequerySuggested is raised allot
(every time the UIElement or any of it's ancestor's gets any UI Notification.)
Implementing your own ICommand and still interacting with the UI would require you to raise CanExecuteChanged event by hand in order to notify ICommandSource objects like Button to raise their command's can execute delegate.
Secondly in order to attach commands in a decoupled manner you would have to implement some sort of CompositeCommand object which is a kind of Event aggregator for Commands.
So as you can see it is possible but the all ICommand objects are meant to correspond to the UI and the WPF framework so there's no real point in placing them in a different class library that you would like to use with other frame works.