In most cases the type of the object that extends handleowner is the only type that needs to provide handles. How about making the complete HandleOwner class templated by the type of the inheriting object? This would remove the unneccessary specification of the type everytime you call handle().
The constructor of e.g. WorldObject can give its this pointer to HandleOwner. This would keep the typesafety in these cases.
The handle<T>() method can stay for ships or other objects where handles to special types are needed.