getnewaddress and watch-only addresses (importaddress)
I don't thing your approach makes sense. Why would you importaddress as watch only and give them out over getnewaddress? Do you try to missuse bitcoind as a address database (importaddress = store  |   getnewaddress = retrieve)?

If you need endless amounts of addresses, you probably like to switch to Bip32 (a.k.a HDWallets). There is a experimental patch for bitcoin-core (https://github.com/bitcoin/bitcoin/pull/6265) which would allow you to call hdgetaddress without having the master seed (private key) in the wallet.