As mentioned, the sf::Event queue carries operating system events only. The sf::Event type itself was never conceived to be filled by users, let alone be extensible for custom events. The existing interface gives you certain guarantees and invariants1. Loosening it, or worse, bloating both the sf::Event and the sf::Window APIs in order to support user-defined events is not only a bad idea because it adds complexity most users won't benefit from2, but also because there's no reasonable way of bringing custom events to a common denominator. The proposed void* + cast + dynamic allocation approach is very ugly, not type-safe and slow. Everybody can write that better, but one needs to know the concrete use case, which SFML is too abstract for.
_________
1 sf::Event guarantees which union members can be read, depending on the value of the type member.
2 Those who did benefit could easily write a wrapping queue themselves -- knowing the STL, it's a trivial task done in a matter of minutes. And one gains much more flexibility than any solution built into SFML.