How to transfer ownership of an extension
There are several places which rely on the full name of the extension:


Extension directory: One must create a new record for the new extension key. Ownership, release-history, etc, will be different.
Pingback stats: The old and new name will have separate stats.
Upgrades (downloading new code): Upgrades issued in the new name won't be displayed as upgrades on existing installations (which expect the old name).
Upgrades (tracking/updating DB schema): The schema versions of the extensions are separate.
Managed entities: If the old and new extensions insert managed entities, there could be uniqueness conflicts. (The ManagedEntities manager does not impose a global uniqueness constraint, but some specific entities do enforce uniqueness -- eg you can't simultaneously register two payment-processor-types with the same name.)


My recommendation: Don't think of it as renaming an extension; think of it as publishing a new extension (and reusing code from the old extension). The new extension should be designed around the old one (eg using different names throughout and/or migrating data).

Speaking in the abstract without a specific extension, it's not simple to rename or replace a extension. However, for specific extensions, there may be mitigating factors:


(No) DB content: If the extension only adds runtime functionality (via hooks) and does not insert anything into the DB, then it will be easier to rename/replace. If the extension does insert into the DB (eg via hook_install, via Upgrader, or via managed-entities), then expect some tasks or complications.
Private vs public extension: If the extension wasn't released to the public, then you may be able to hack through conflicts (eg manually changing over DB references), and you probably won't care about the extensions directory, the pingback stats, or distributing upgrades.