Snapshot blocks are possible without any forks, just nobody did it (yet). As long as new nodes are backward-compatible, there is no problem with that. I can imagine for example two week snapshots, done once per difficulty change. Then, your new client can download the latest UTXO set and start backward verification, processing 2016 blocks at a time in compressed form. Later, if snapshot from 2016 blocks is not enough, it could be replaced by 210,000 blocks snapshot, that would be 104+1/6 two-week blocks.
There is no need for a second Genesis Block. One is needed to set some starting point and prevent overwriting the whole chain in early days, when messing with timestamps by mining for example blocks from 1970 could be possible. But if you want to create some universal solution for a foreseeable future, then some rule of creating that kind of blocks regularly is needed, for example every 2016 blocks, every 210,000 blocks, and so on.
Edit: Also, we have some checkpoints, so overwriting them is impossible:
checkpointData = {
{
{ 11111, uint256S("0x0000000069e244f73d78e8fd29ba2fd2ed618bd6fa2ee92559f542fdb26e7c1d")},
{ 33333, uint256S("0x000000002dd5588a74784eaa7ab0507a18ad16a236e7b1ce69f00d7ddfb5d0a6")},
{ 74000, uint256S("0x0000000000573993a3c9e41ce34471c079dcf5f52a0e824a81e7f953b8661a20")},
{105000, uint256S("0x00000000000291ce28027faea320c8d2b054b2e0fe44a773f3eefb151d6bdc97")},
{134444, uint256S("0x00000000000005b12ffd4cd315cd34ffd4a594f430ac814c91184a0d42d2b0fe")},
{168000, uint256S("0x000000000000099e61ea72015e79632f216fe6cb33d7899acb35b75c8303b763")},
{193000, uint256S("0x000000000000059f452a5f7340de6682a977387c17010ff6e6c3bd83ca8b1317")},
{210000, uint256S("0x000000000000048b95347e83192f69cf0366076336c639f9b7228e9ba171342e")},
{216116, uint256S("0x00000000000001b4f4b433e81ee46494af945cf96014816a4e2370f11b23df4e")},
{225430, uint256S("0x00000000000001c108384350f74090433e7fcf79a606b8e797f065b130575932")},
{250000, uint256S("0x000000000000003887df1f29024b06fc2200b55f8af8f35453d7be294df2d214")},
{279000, uint256S("0x0000000000000001ae8c72a0b0c301f67e3afca10e819efa9041e458e9bd7e40")},
{295000, uint256S("0x00000000000000004d9b4ef50f0f9d686fd69db2e03af35a100370c64632a983")},
}
};
That means the first 295,000 blocks are impossible to overwrite, even if you have enormously huge computing power and somehow create not just 51% attack, but 99,99% attack.