Porting a large cocos2d v2.x project to use cocos2d v3.x is an enormous task because almost everything has changed. It would probably be shorter to list the things that have not changed between v2.2 and v3.4 than what has.
You have to basically go through every single line of code that references anything in cocos2d, and check that it uses the v3.x equivalent (in most cases the compiler will help because it will give error messages or warnings, but with some features the compiler won't help you, which can cause a lot of work.) Some of the changes are really fundamental and massive and may require extensive refactoring of your code (eg. if you did anything in the 'draw' function of a class, created your own triangle meshes, used shaders, etc. Also touch handling is radically different in v3.x, and may require significant changes in your code.) In some cases entire cocos2d classes are gone, so you'll have to substitute them with your own, or refactor your code to use the new design instead.
Mind you, most of the changes have been for the better. (For example, CCLayer was indeed rather useless, with no relevant difference to CCnode. Unifying them only makes sense. Likewise CCButton is a lot more versatile than CCMenuItem was. CCButton is also much easier to extend via inheritance. Putting all the touch handling functionality in CCNode was an excellent choice, as it makes many things a lot easier.) Other changes I don't agree with (such as changing all color definitions to use the new CCColor class, which is verbose, cumbersome and to some extent inefficient.)
You don't need to enable ARC in your own code to use cocos2d. Objective-C/Xcode can perfectly manage two modules using different ARC settings, so it's not a problem in any way. Simply disable ARC in your own code and you can use cocos2d just fine. (Although, IIRC, there was one cocos2d header that had to be changed if you don't use ARC. I think it was some property attribute somewhere.)