I've extracted all the SocketIO implementation functionality like path parsing, handshake and message building into a separate distribution Protocol::SocketIO. This way it can be uses outside of PocketIO and AnyEvent.
And I thought the same way. Many frameworks for various functionality I've used were forcing their way of doing things, and thus replacing flexibility with vendor lock-in. Particular implementation shoudn't stop you from replacing it with another one later on. And some libraries (speaking not about Plack here :) go too far by introducing their own base classes that you have to inherit from, exception mechanizms that behave not in the common way and lots of code that you'll never need.
At work when using a CPAN module we at least write an adaptor with interface and functionality we need, which saves us from the replacement pain or unexpected release lacking backwards compatibility.
More KISS and YAGNI for everyone.