What constraints does the Arduino way of coding put on me?
You're a psychic, and you're asking us?
Whether to start using Atmel Studio 6 from the outset (not my normal IDE), or use the Arduino IDE.
Use the IDE until you find issues with it.
Whether I have to (should) use the whole setup() loop() & Arduino libraries.
Have to? No. Should? Yes.
The tasks to be performed on the Arduino lend themselves to setup stuff and stuff to do over and over. Why not fit the normal structure?
I've read that using the Arduino IDE and using the Arduino codebase/libraries can be 'limiting' once you advance. Is this true?
Rubbish. You may find that the IDE doesn't suit you after a while, though I still use it. The Arduino code and libraries you will continue to use, unless you like reinventing the wheel.
Can I mix & match code?
You can. But, does it make sense?
Could I use an Arduino library for say, TCP Stack, and low level C-code my timers & serial interface?
Yes, but again why? The serial interface already exists. Why reinvent it?
If I use any of the Arduino library methods, do I have to use the setup()/loop() methods
No. The use of a library does not tie you to setup() and loop().