Aye it looks like it was scripted to me as well. You don't have to use the built in chase system. You could use Lua script & a mainLoop to listen out for when the playable character is walking or stops. To make it more dynamic you could wait x random time before having the character follow the player & x random time after player stops before forcing the character to stop. As for random events, just bang a load of animations into the random animations section for the character(s) for each direction, adjust the random min & max time to make them occur more frequently & you can get your characters while not chasing the main character to do random things such as: blink, scratch head or scratch an itch, shuffle around, walk off somewhere, take something out of their inventory & play around with it, look around with their head, tap their feet or whatever. You could even add in a fallback to make sure the character isn't currently playing a random animation to prevent them from cancelling the animation & chasing the character immediately.
Sorry for the long wall of text, but it's just a theoretical approach that you could take for creating something more dynamic.
As for drag & drop, I made it similar to caligarimarte's method, except I used a mouseEvent handler & actual scene objects. I used a method for checking if 2 polygons overlapped or if the mouse cursor was inside of a polygon (I forget which method) & if it was & the piece belonged inside of the space then it automatically slid into the correct position or it just dropped in the position it currently was on the screen.