AES 128-bit encryption - not getting expected results
However, when I tried using an online AES encyption tool encrypting a 16-byte message produced 32-byte output. How is that possible? What am I not understanding correctly?

The tool in question seems poorly documented for implementation validation. It appears that it performs padding to deal with arbitrary length inputs. This padding is necessary if you want to encrypt arbitrary length messages in a reversible way, however, this implies that you need to add at least one message to the plaintext before encrypting it. This expansion yields the observation: A 16-byte message needs padding to ensure padding is there to be removed. However in a 16-byte block, there's no space for extra padding, so a second block is produced and appended only containing padding.
If you insist on using this tool, it should be possible to do so but just taking the first 16 bytes of the output as the plain input.
Alternatively, you can use tools that don't perform unspecified padding or use the test vectors specified in FIPS-197 (PDF).